簡體   English   中英

完成后要編寫程序嗎?

[英]Process writing after it's finished?

我有一個像這樣開始的過程:

Process process = new ProcessBuilder("sh", "-c", "mongod | tee /tmp/logfile.txt");

該過程在被中斷時正常結束,將其寫入輸出流“ dbexit:現在確實退出”

所以稍后,我想殺死它:

InputStream inputStream = process.getInputStream()
Scanner scanner = new Scanner(inputStream).useDelimiter(Pattern.quote("dbexit: really exiting now"));
//pid taken from grep
Shell.runShellCommand("kill -2 " + pid).waitFor();
scanner.next()

總是在我的機器上成功運行。 但是幾乎從來沒有在CI服務器上。 Scanner.next()拋出:

java.util.NoSuchElementException: null
    at java.util.Scanner.throwFor(Scanner.java:838)
    at java.util.Scanner.next(Scanner.java:1347)

因此,在編寫“ dbexit:現在確實退出”之前,該過程似乎已結束(或至少關閉了它的InputStream)。 但是此文本顯示在/tmp/logfile.txt 進程InputStream仍在編寫時是否可能已關閉? 並將其寫入文件?

輸入流被緩沖。 您從緩沖區讀取數據,這些數據是在進程終止之前寫入的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM