我正试图从Android应用程序中获取一个PID的strace命令。代码段如下:
Runtime.getRuntime().exec("strace -p 20436 -o /mnt/sdcard/sampleTrace11.txt");
创建了文件 sampleTrace11.txt 但它是空的。当我从shell命令提示符执行相同的命令时,文件将写入数据。任何人都可以帮助我..
答案 0 :(得分:0)
我希望它与权限相关。一个好方法是使用run-as
中的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" />
如果相关流程不属于您的应用程序,则会以其他用户身份运行。因此,您的申请将无权检查它。除了使用root电话并将su -c
添加到命令行之外,你无能为力。
其他一些想法:
请尝试使用Runtime.getRuntime().exec()
类,而不是使用ProcessBuilder
。这将使您能够做各种有用的事情: