私はデバッグユーティリティfork
を書いていますが、その子の終了SIGCHLD
がその親にトリガーされるのを防ぎながら、子にしたいです。私はまだ、他の子供たちがSIGCHLD
終了時に通常どおりに発生することを望んでいます。
fork
既存のハンドラーをトリガーしたくないのでこれを行いたいのです$SIG{CHLD}
が、それでも他の子にそれをトリガーさせたいのです。つまり、新しい子を隔離したいのですが、既存の子の管理に干渉したくありません。
$SIG{CHLD}
元のハンドラーをいつ呼び出す必要があるかを適切に検出できるとは思わないため、カスタムハンドラーをローカルにインストールすることには慎重です。たとえば、ローカル$SIG{CHLD}
ハンドラーをインストールするSIGCHLD
と、子をスポーンして親waitpid
を終了させると、必ずシグナルを受信します。ただし、それSIGCHLD
は他の子も終了したかどうかを示すものではないため、元のハンドラーを呼び出すかどうかはわかりません。
プロセスがその親 pid を変更できないことを調査しました。子のプロセス グループ ID またはセッション ID を変更することが役立つかどうかはわかりません。
SIGCHLD
特定の子が親でトリガーするのを防ぐことさえ可能ですか? 既存のハンドラーが予期していなかった子$SIG{CHLD}
のシグナルを受信したときに、正しいことを実行することに依存する必要がありますか?SIGCHLD
そのデバッグ ユーティリティを実装するためのより良い方法があるかもしれませんが (ある場合はお知らせください)、POSIX が子に対するそのようなきめ細かな制御を提供するかどうかはまだ疑問に思っており、私のジレンマに対する Perl ソリューションを探しています。