0

我试图运行以下指令,

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

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

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

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

4

2 回答 2

1

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

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

> adb shell
$ grep
grep: not found

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

于 2012-08-27T14:10:57.873 回答
0

问题是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");

(在从 Java 执行之前,尝试从 adb 交互式运行“shell ....”部分。)

于 2012-08-27T14:39:28.493 回答