簡體   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