大量のテキストを出力する Java プロセスがあります。ときどき、テキストを少しだけ見たいと思うことがあります。通常のプログラムでは、次のことができます。
$ myprog | head
myprog から 10 行の出力が表示され、すぐに終了します。しかし、Javaを使用すると、次のようになります。
$ java MyClass | head
出力の最初の 10 行を取得しますが、Java プロセスはすべての処理が完了するまで終了しません。java は stdout (System.out) がなくなり、head プロセスが死んでなくなったことを気にしないようです。
他のすべてのプログラムは、cat のように黙って終了します。
$ cat /etc/group | head
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
または、python のように、壊れたパイプ エラー/例外で終了します。
$ python -c 'while True: print "hi"' | head
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
Traceback (most recent call last):
File "<string>", line 1, in <module>
IOError: [Errno 32] Broken pipe
出力を head のようなものにパイプするときに System.out.println() を呼び出すときに、Java で例外を発生させるにはどうすればよいですか? 次のようなことができるようになりたいです:
try {
while(true) {
System.out.println("hi");
}
} catch(BrokenPipeException e) {
// exit gracefully
}