我想要一个在后台运行的应用程序(服务),在计时器上运行 procrank 并将输出写入 sdcard 上的文件。本质上我想执行“/system/xbin/procrank > /sdcard/procrank.txt”。在等待期间,我对文件进行了一些 [最小] 处理,因此我可以在下次运行时覆盖它。
这是在测试手机上,所以它可以被认为是“root”。我尝试了许多不同的方法来运行命令,但没有成功。
当我使用这个时:
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 上的许多其他解决方案不同。
是的,我的 sdcard 是可写的, /sdcard 相当于 . 我可以从 adb shell 发出命令并创建文件。
尝试通过套接字连接到本地主机然后发出命令,我会有更多的运气吗?