繁体   English   中英

Java:在读取进程的InputStream之前等待进程的子进程完成

[英]Java: Wait for subprocess of process to finish before reading process's InputStream

我有一个创建如下的过程:

Process p = Runtime.getRuntime().exec(new String[]{"su"});

在我的程序中,我只想创建一次此过程。 我正在为Android开发一个根文件资源管理器应用程序,每当创建此过程时,Android设备将提示用户授予root权限。 这是一个非常慢的操作,因为这是一个文件浏览器,它经常需要root权限。 所以,我决定一次创建这个进程,并以下面的方式将命令写入其OutputStream(stdin是这个OutputStream):

stdin.writeBytes(command + "\n");

在我可以读取命令的输出之前,我需要我的程序等到 writeBytes 写入的命令 终止。 我试过p.waitFor() ,但这导致程序挂起。

以下是我从InputStream中读取字节的方法:

int read;
String out = "";
stdout = p.getInputStream();
byte[] buffer = new byte[262144];

while (true) {
    read = stdout.read(buffer);
    out += new String(buffer, 0, read);
    if (read < BUFF_LEN) {
        //we have read everything
        break;
    }
}

请注意,尽管read(buffer)方法会阻塞直到输入数据可用,但在这种情况下它不会阻塞,因为它认为它已到达InputStream的末尾。

我试图在这篇文章中仅包含我的代码的相关部分,但是如果你想查看包含它的类的完整源代码,请参见此处: http//pastebin.com/t6JdWmQr

在读取进程'InputStream之前,如何确保命令已完成运行?

我也遇到类似的问题,我在这里找到答案: 等到su中的命令完成

如果在这个shell进程中不需要任何读取流,只需添加shell读取流即可完成shell进程。

或者在XDA中也有更好的方法: [HowTo]执行Root命令和读取输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM