2

我想要一个在后台运行的应用程序(服务),在计时器上运行 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 发出命令并创建文件。

尝试通过套接字连接到本地主机然后发出命令,我会有更多的运气吗?

4

2 回答 2

1

这个问题太老了,但如果有人遇到这个问题:我也遇到了这个问题。执行以下操作为我解决了这个问题:

adb 等待设备根目录

adb 等待设备重新挂载

adb 外壳程序

于 2015-05-15T06:23:34.103 回答
0

这似乎是手机构建的问题,也许还有其他问题。

我不知道如何结束这个问题。我可以关闭它吗?

于 2013-10-01T20:50:50.273 回答