我有一個java進程打印出大量的文本。有時我只想看一些文字。通過正常的程序,我可以這樣做:我該如何讓java退出時管道
$ myprog | head
我只看到10行輸出myprog,它會立即退出。但是用java,如果我這樣做:
$ java MyClass | head
我得到的第一個10行輸出,但是Java程序不會退出,直到它與所有的處理完成。這就像java不關心標準輸出(System.out)消失,頭部進程已經消失。
所有其他程序或者退出默默地,像貓:
$ 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 -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
如何獲取Java引發異常時調用System.out.println()當我管輸出到頭像?我很想能夠做到像:
try {
while(true) {
System.out.println("hi");
}
} catch(BrokenPipeException e) {
// exit gracefully
}
在這種情況下,SIGPIPE被髮送到java進程,但我不確定java用它做什麼。如果你可以檢查JVM是否收到sigpipe並死掉,它應該可以工作。 – 2012-07-27 21:15:27
Java使用信號做特殊的事情,我從其他問題知道,幾乎不可能將java程序設置爲陷阱信號。 – onlynone 2013-01-11 17:51:55