Есть ли процесс, который не отправляет EOF до завершения и как его создать?

Я подозреваю, что процесс не посылал EOF, когда его убивали с SIGINT и SIGKILL соответственно. Может ли быть так (или все процессы всегда посылают EOF в stdout и stderr после завершения любого сигнала)? Если да, то как я могу имитировать такой процесс, чтобы я мог использовать его в тестовом модуле Java (который должен запускаться на Linux только для стартеров)?

В английской статье Wikipedia EOF неясно, что немецкий говорит, что EOF «может» быть отправлен.

Я знаю, что это, вероятно, проблема XY, и просить поддержки в отладке Java-кода быстрее будет исправлять все, но я заинтересован в получении ответа на этот вопрос. Я также знаю, что обработка обработки была улучшена в Java 9, которую я пока не могу использовать.

Я использую Ubuntu 17.04 с Linux 4.10.

EOF самом деле не «отправлен». Это событие, когда ваш процесс вызывает системный вызов read и он возвращает 0 , что для труб происходит, когда другой конец канала закрыт (всеми обработанными им процессами, если файл filedescriptor был дублирован).

Ядро всегда будет закрывать все filedescriptors в завершающих процессах. Вокруг него нет никакого способа (даже подавать заявки на процессы SIGKILL'а). Если какой-либо из этих filedescriptors является последней ссылкой на конец записи документа filedescriptor, следующее read на соответствующем конце чтения вернет 0, которое stdio будет интерпретировать как EOF .

Вероятно, это не проблема, если отправлено несколько символов EOF . Таким образом, вы можете запускать свою Java-программу вместе с кодом оболочки, который выводит EOF после выхода из программы Java.

 ( javaprog ; echo -n $'\4' ) | program_waiting_for_eof 

Однако необходима некоторая конфигурация для обработки сигналов, чтобы гарантировать, что процесс Java будет убит, но код продолжения все еще выполняется. Если это подходящий подход для вас (который вы можете протестировать, убив процесс Java напрямую с помощью kill $PID с другого терминала), я могу предоставить дополнительную информацию, чтобы сделать это, если вам это нужно.