【问题标题】:Not able to run grep command无法运行 grep 命令
【发布时间】:2012-08-27 14:09:57
【问题描述】:

我试图运行以下指令,

 Process p = Runtime.getRuntime().exec("/system/bin/lsof|grep mediaserver");

在 android(java) 中,但出现错误。如果我按照说明运行,

 Process p = Runtime.getRuntime().exec("/system/bin/lsof ");

文件已成功保存。谁能告诉我是什么错误?实际上我想列出并检查媒体服务器服务是否正在运行。

【问题讨论】:

  • 好吧,既然你是得到错误的人,也许你可以告诉我们错误是什么。也许那时我们可以帮助你,不是吗?
  • 第一个猜测?由于您必须将 /system/bin 放在 lsof 命令的前面,也许尝试将 grep 的路径也放在那里?即使用 /system/bin/lsof | /system/bin/grep mediaserver" 或任何 grep 的路径。
  • 我收到以下错误 W/System.err(345):java.io.IOException:运行 exec() 时出错。命令:[/system/bin/lsof|grep, init] 工作目录:null 环境:null

标签: java android linux android-mediaplayer lsof


【解决方案1】:

您的设备上可能未安装 grep 实用程序。

您可以通过在控制台中尝试以下操作来检查它:

> adb shell
$ grep
grep: not found

最后一行表示此命令不可用。

【讨论】:

【解决方案2】:

问题是Runtime.getRuntime().exec(...)不知道如何处理shell语言。在 Linux / Unix 平台上,你会这样:

Process p = Runtime.getRuntime().exec(new String[]{
    "/bin/sh", "-c", "/system/bin/lsof | grep mediaserver"});

但是,(显然)Android 默认没有命令外壳/命令提示符。因此,要么您需要在设备上识别并安装合适的外壳,要么“手动”构建管道;即通过创建一个“管道”文件描述符,并执行这两个命令,以便lsof 写入管道,grep 从中读取。

也许答案就是这样运行...

Process p = Runtime.getRuntime().exec(
        "adb shell /system/bin/lsof | grep mediaserver");

(尝试从 adb 交互式运行“shell ....”部分,然后再从 Java 中运行。)

【讨论】:

  • 感谢您的回复,我收到错误 W/System.err(1370): java.io.IOException: Error running exec()。命令:[/bin/sh, -c, /system/bin/lsof | grep init] 工作目录:null 环境:null
  • “/bin/sh”这个字符串是什么
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 2018-07-18
  • 2022-01-16
  • 2014-03-22
  • 2017-01-11
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多