2012-08-27 230 views
0

我试图运行下面的命令,无法运行grep命令

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

在安卓(JAVA),但我得到的错误。如果我运行下面的指令,

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

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

+0

好,既然你是得到错误的人,也许你可以告诉我们错误是什么。也许那么我们可以帮助你,不是吗? – verdesmarald

+0

首先猜测?既然你必须把/ system/bin放在lsof命令的前面,也许你可以尝试把grep的路径放在那里呢?即使用/ system/bin/lsof |/system/bin/grep mediaserver“或任何grep的路径 – billjamesdev

+0

我收到以下错误W/System.err(345):java.io.IOException:运行exec()的错误。 bin/lsof | grep,init]工作目录:null环境:null – chiv

回答

1

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

您可以通过尝试检查它在一个控制台执行以下操作:

> adb shell 
$ grep 
grep: not found 

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

+0

如果缺少grep,该怎么办?是否有shell替代方法? – Elist

+0

检查了这一点:https://stackoverflow.com/questions/27615220/grep-command -not-found-in-adb-shell – fiddler

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做运行前亚行的“壳......”的一部分。)

+0

感谢回复我收到错误W/System.err(1370):java.io.IOException:运行exec()的错误。命令:[/ bin/sh,-c ,/ system/bin/lsof | grep init]工作目录:null环境:null – chiv

+0

“/ bin/sh”是什么字符串? – chiv