我有一个打印出大量文本的 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
}