SIGCHLDのデフォルト設定と明示的にSIG_IGNに設定された設定の違いは何ですか?

SIGCHLDのデフォルト設定と明示的にSIG_IGNに設定された設定の違いは何ですか?

Linuxプログラミングインターフェース説明する

26.3.1 SIGCHLDハンドラの作成

親プロセスの子プロセスが終了するたびに、SIGCHLD信号が親プロセスに送信されます。基本的に、この信号は無視されますが、次のようにキャプチャできます。信号ハンドラの取り付け。シグナルハンドラでwait()(または類似)を使用してゾンビ子プロセスを取得できます。しかし、このアプローチには考慮すべき微妙な点があります。

26.3.3 死んだ子プロセスを無視

死んだ子プロセスを処理することもできます。 SIGCHLD を SIG_IGN に明示的に設定すると、後で終了するすべての子プロセスがゾンビプロセスに変換されず、システムからすぐに削除されます。この場合、子プロセスの状態は単に削除されるため、wait()(または同様のもの)への後続の呼び出しは、子プロセスの終了に関する情報を返すことはできません。

参考にしてください。 SIGCHLDの基本構成 無視できますが、 明示的に処理をSIG_IGNに設定 ここで説明されている他の動作につながります。これに関して、SIGCHLDは信号間で一意に処理される。

SIGCHLDのデフォルト設定と明示的にSIG_IGNに設定された設定の違いは何ですか?

ありがとう

答え1

SIGCHLD の処理を​​ SIG_IGN に明示的に設定すると、後で終了するすべての子プロセスがゾンビプロセスに変換されず、システムからすぐに削除されます。

デフォルト構成では、シャットダウン状態が検出されるまで、サブプロセスはシャットダウン時にゾンビになります。親を表すSIGCHLDように設定SIG_IGN気にしないで子孫の終了コードに関して、終了時にすぐに収集されます。

関連情報