Как я могу получить Java для выхода, когда по трубопроводу в голову

У меня есть процесс Java, который печатает много текста. Иногда я просто хочу увидеть немного текста. С обычными программами я могу просто сделать:

$ myprog | head

Я просто увижу 10 строк вывода из myprog, и он сразу выйдет. Но с Java, если я делаю:

$ java MyClass | head

Я получаю первые 10 строк вывода, но Java-процесс не завершится, пока не будет завершена вся его обработка. Это похоже на то, что java не заботится о том, что stdout (System.out) пропал, а головной процесс мертв и пропал.

Все остальные программы либо выходят молча, как 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

Как заставить Java вызывать исключение при вызове System.out.println (), когда я передаю вывод в нечто вроде head? Я хотел бы иметь возможность делать что-то вроде:

try {
    while(true) {
        System.out.println("hi");
    }
} catch(BrokenPipeException e) {
    // exit gracefully
}

Ответы на вопрос(2)

Ваш ответ на вопрос