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
気にしないで子孫の終了コードに関して、終了時にすぐに収集されます。