无法运行grep命令

时间:2012-08-27 14:09:57

标签: java android linux android-mediaplayer lsof

我试图运行以下指令,

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

在android(java)但我收到错误。如果我遵循以下指示,

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

文件已成功保存。任何人都可以说出错误是什么?实际上我想列出并检查媒体服务器服务是否正在运行。

2 个答案:

答案 0 :(得分:1)

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

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

> adb shell
$ grep
grep: not found

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

答案 1 :(得分:0)

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

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

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

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

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

(尝试从Java中以交互方式运行“shell ....”部分。)