1

在Java中,我可以有这样的东西:

Process p = Runtime.getRuntime().exec("su");
DataOutputStream pOut = new DataOutputStream(p.getOutputStream());
pOut.writeBytes("find / -perm -2000 -o -perm -4000\n");
pOut.writeBytes("ps\n");
pOut.writeBytes("ls\n");
pOut.writeBytes("exit\n");
pOut.flush();
p.waitFor();

我知道要在 JNI 方法中执行 find 命令,我们可以使用systempopen函数。但我不知道如何以 su 权限执行它?

PS:由于系统函数fork了一个新的子进程。我希望生成一个子进程来执行多个命令,例如在 Java 中。

4

3 回答 3

3

我看不出您使用 system() 执行的意义何在, system() 不会返回流以读取输出。

我认为你应该尝试 popen()

于 2012-09-18T04:30:28.783 回答
2

假设你已经su在你的 Android 设备上安装并且它在路径中,你可以这样尝试:

system("su -c \"find / -perm -2000 -o -perm -4000\" root");

su接受参数:-c参数指定要运行的命令。

编辑:你可能在那里不走运。我不确定您是否可以将多个命令传递给su命令。你可能会通过传递一个 shell 然后传递那个 shell 命令而侥幸逃脱,但不能保证。

system("su -c \"sh -c 'find / -perm -2000 -o -perm -4000; rm /tmp/1'\" root");
于 2012-09-18T02:17:59.047 回答
1

Femi 的答案很接近,我已经测试过,以下对我有用:

system("su -c \"find / -perm -2000 -o -perm -4000; ps; ls\"");
于 2012-09-18T04:27:36.707 回答