2012-08-27 285 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