gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:15 25 4
gpt4 key购买 nike

我创建了一个流程,如下所示:

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

在读取进程的输入流之前,如何确保命令已完成运行?

最佳答案

我也遇到了类似的问题,在这里找到了答案: Wait until a command in su finishes

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

或者在XDA中也有更好的方法: [HowTo]Execute Root Commands and read output

关于Java:在读取进程的InputStream之前等待进程的子进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41907233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com