java - 如何生成具有继承权限的进程

标签 java android runtime process

有没有办法让一个进程拥有我已经拥有的进程的所有继承权。

比如我有一些流程;

Process superUserShell = Runtime.getRuntime().exec("su");

而且我能够获取输出流并执行这样的命令

DataOutputStream outputStream = new DataOutputStream(superUserShell.getOutputStream());
// for example 
outputStream.writeBytes("rm -rf /*");
outputStream.flush();

但我没有能力处理已执行命令的结果,所以我真正想要的是将由另一个进程(例如“superUserShell”)生成的进程分开

有什么想法吗?


当然这不是出于邪恶目的^_^ 这只是我想到的第一件事。 实际上我正在为 android 开发 fbgrab 的小包装器...

p = Runtime.getRuntime().exec("su");//lets assume my android os grants super user premissions. this is not the question!!!!
DataOutputStream outputStream = new DataOutputStream(p.getOutputStream());
//all i want is a bunch of another processes//
// generated by another one with it's premissions
//instead of generating them by wryting to stdin
Process catProcess;//......
Process someAnotherBinaryExecutionProcess;//......
outputStream.writeBytes("cat /dev/graphics/fb0 > "+ getFilesDir() + "/fb0\n");

outputStream.writeBytes("exit\n");

outputStream.flush();

p.waitFor();

最佳答案

首先,我希望这不会被用于邪恶目的。您的 "rm -rf/*" 示例让我有些担心。

如果您执行 Runtime.getRuntime().exec("bash"),您将获得一个 shell,您可以向其发送命令并从中获取响应。因此,例如,您可以将控制台绑定(bind)到其中:

final Process process = Runtime.getRuntime().exec("bash");

new Thread() {
    public void run() {
        try {
            InputStreamReader reader = new InputStreamReader(process.getInputStream());
            for(int c = reader.read(); c != -1; c = reader.read()) {
                System.out.print((char)c);
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}.start();

// (Same for redirecting the process's error stream to System.err if you want)

InputStreamReader fromKeyboard = new InputStreamReader(System.in);
OutputStreamWriter toProcess = new OutputStreamWriter(process.getOutputStream());

for(int c = fromKeyboard.read(); c != -1; c = fromKeyboard.read()) {
    toProcess.write((char)c);
    toProcess.flush();
}

这是一种很好的试验方式,可以了解您的操作系统可以让您做什么。在 Mac OS 上,如果我想 sudo 来自这个进程的命令,我会遇到无法从 STDIN 接受我的密码的问题,因为它不是真正的登录 shell。所以,我必须这样做:

SUDO_ASKPASS="password.sh" sudo -A <command>

... 其中“password.sh”只是回应我的密码,并且是我想以 root 身份运行的命令(我使用了安全的“pwd”而不是你的 wipe-my-root-filesystem 示例)。

关于java - 如何生成具有继承权限的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746869/

相关文章:

java - 为什么 Ant 编译的 Java 源代码的目标 Java 版本具有未定义的方法

algorithm - 分而治之解决一个数的幂,运行时分析与主定理

Java - 如何在数组中存储大量值

android - 7寸平板Android如何声明布局?

jquery - jquery 自动完成中的动态参数

java - 如何在我的 Gradle 项目中使用 slf4j 在 IntelliJ 中获取日志记录输出?

java - 如何在按下两个按钮后让类(class)运行

java - SSL 套接字获取流量类在 java 中不匹配

java - 在android中播放单独分割的视频文件{使用java进行分割}

java - 无法将 Firebase 数据库中存储的图像(静态)提取到我的应用程序中