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
。