0

我正在尝试从 android 应用程序执行 PID 的 strace 命令。代码段如下:

Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");

文件sampleTrace11.txt已创建但为空。当我从 shell 命令提示符执行相同的命令时,文件会写入数据。谁能帮帮我吗..

4

1 回答 1

0

我希望它与权限相关。一个好方法是使用run-asfrom adb shell。例如,假设您的应用程序是com.srooth.fancyapp,请执行以下操作:

adb shell run-as com.srooth.fancyapp strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt

如果这不起作用,您知道这与 的权限有关com.srooth.fancyapp,并且您可以期望在从 Java 中运行时获得相同的结果。

一些可能的权限问题:

  • 您的应用无权写入 SD 卡。此功能将由以您的用户身份运行的所有其他应用程序继承,因此确保您AndroidManifest.xml指定权限很重要:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  • 如果有问题的进程不是您的应用程序的一部分,它将以不同的用户身份运行。因此,您的应用程序将无权检查它。对此您无能为力,除了使用有根电话并添加su -c到命令行之前。

其他几个想法:

  • 如果可以,请尝试启动该进程而不是附加到它。这应该没有任何区别,但可以帮助您调试问题。
  • Runtime.getRuntime().exec()尝试使用ProcessBuilder类,而不是 using 。这将使您能够做各种有用的事情:

    • 等到该过程完成
    • 看看它的标准输出
    • 看看它的标准误
    • 获取它的返回码。
于 2013-02-11T21:46:32.063 回答