終了する前にEOFを送信しないプロセスがあり、どのように生成しますか?

終了する前にEOFを送信しないプロセスがあり、どのように生成しますか?

SIGINTプロセスがそれぞれ使用され、終了したときにEOFを送信しないようですSIGKILL。これは本当ですか(またはすべてのプロセスがシグナルによって終了した後は常にEOFを送信しますか?stdout) 。stderrそれでは、Javaユニットテストで使用できるようにこれらのプロセスをどのように模倣できますか(初心者の場合はLinuxでのみ実行できます)。

英語ウィキペディア EOF 記事これについてはわかりません。ドイツ人EOF を送信することが「可能」であることを示します。

私はこれがおそらくXYの問題であることを知っており、Javaコードのデバッグ中にサポートを求めることで問題をより早く解決できますが、この質問に対する回答を得ることにも興味があります。 Java 9では、プロセス処理機能が改善されていることがわかっていますが、まだ使用できません。

私はUbuntu 17.04とLinux 4.10を使用しています。

ベストアンサー1

AnはEOF実際には「転送」されません。これは、プロセスがreadシステムコールを呼び出してを返すイベントです0。パイプの場合、パイプのもう一方の端が閉じられると発生します(ファイル記述子がコピーされた場合はパイプを所有するすべてのプロセスによって)。

カーネルは常に終了します。みんなプロセスでファイル記述子を終了します。この問題を解決する方法はありません(SIGKILLプロセスのファイル記述子も閉じます)。これらのファイル記述子の1つがパイプファイル記述子の書き込み終了への最後の参照である場合、その読み取り終了の次のreadファイル記述子は0を返しstdioますEOF

おすすめ記事