2

私はそのように開始されたプロセスを持っています:

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

このプロセスは、中断されると正常に終了し、出力ストリームに「dbexit: really exiting now」と書き込みます。

だから後で、私はそれを殺したい:

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 が閉じられた可能性はありますか? そして、それはファイルに書き込まれましたか?

4

1 に答える 1