親プロセスと子プロセスの両方が存続期間中あなたの管理下にある場合、最も移植性の高い方法は、パイプまたはソケットの半分を親プロセスと共有することです。
<オール>この方法の利点は、UNIX で最も習得が難しいメカニズムの 1 つであるシグナルを完全に回避し、ネットワーク マルチプレクサまたは GUI イベント ループと簡単に統合できる待機可能な記述子を提供することです。
getppid()
を呼び出すと、親プロセス ID を取得できます。 kill()
経由でシグナル 0 を送信する .戻りコード 0 は、プロセスがまだ有効であることを示します。
@Ariel で言及されているように、getppid()
元の親の pid または init の pid を返します。これは pid 1 になります。そのため、getppid()
を呼び出して親 pid を保存する必要があります。 起動時または後で、親の pid が 1 かどうかを確認してください。
Linux でのこの回答によると、 prctl()
を介して親の死を検出することもできます の PR_SET_PDEATHSIG
オプションと自分で選んだシグナル。