[英]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.