我想有一個應用程序(服務)在後臺運行,在定時器上運行procrank &將輸出寫入SD卡上的文件。基本上我想執行「/ system/xbin/procrank> /sdcard/procrank.txt」。在等待期間,我會對該文件進行一些[最小化]處理,以便在下次運行時覆蓋它。在Android上,無法從java應用程序運行procrank
這是在測試手機上,所以它可以被視爲「紮根」。我嘗試了很多不同的方式來運行命令而沒有成功。
當我使用這個:
String[] cmd = { "/system/xbin/procrank > /sdcard/procrank_result.txt" };
Process process = new ProcessBuilder()
.command(cmd)
.redirectErrorStream(true)
.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
Log.i(Constants.TAG, "Line=" + line);
}
process.waitFor();
我得到一個IOException:
09-28 02:48:16.307: W/System.err(9579): java.io.IOException: Error running exec(). Command: [/system/xbin/procrank > /sdcard/procrank_result.txt] Working Directory: null Environment: [ANDROID_ROOT=/system, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, LOOP_MOUNTPOINT=/mnt/obb, ...
所以我想我只會發出命令和讀取輸出:
String[] cmd = { "/system/xbin/procrank" };
Process process = new ProcessBuilder()
.command(cmd)
.redirectErrorStream(true)
.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
Log.i(Constants.TAG, "Line=" + line);
}
process.waitFor();
但我從procrank得到一個我不明白的錯誤:
Line=Error creating kernel interface -- does this kernel have pagemap?
任何人都可以幫助我嗎?
此外,我嘗試了很多不同的方法來發出命令,所以使用getRuntime()。exec過程的另一種變體可能不會工作,除非它與StackOverflow上的許多其他解決方案不同。
是的,我的SD卡是可寫的,/ SD卡相當於。我可以從adb shell發出命令並創建該文件。
如果試圖通過套接字連接到本地主機,然後發出命令,我會有更多的運氣嗎?
我也收到此錯誤,但是當你用它通過PC的控制檯,它工作正常... –