私はメインプロセスから子プロセスを起動するためにposix_spawnpを使用します。スポーンされたプロセスが無効になる
int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ);
if (iRet != 0)
{
return false;
}
子プロセスがエラーなしで生成された後、突然無効になることがあります。これはどうして起こるのでしょうか?
void SigCatcher(int n)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}
と私は子プロセスを殺すたび、私は手動でそれを呼び出す:
私は子プロセスを享受するためにシグナルハンドラを使用しています。
kill(oProcID, SIGKILL);
signal (SIGCHLD, SigCatcher);
これは、子どもが生まれなくなる(私がkillと呼ぶことなく)ことができますか?
感謝。私はシグナルハンドラを共有ライブラリに実装しました。コンストラクタに "signal(SIGCHLD、SigCatcher)"を置くと登録されません。これはメイン()に入っていなければなりませんか? – Gayan
@ Gayan:おそらく、アプリケーションがメインで最初に行うことの1つとしてシグナルハンドラを設定するだけです。 –
コンストラクタ内にあるということは重要ではありません。とにかくメインになるはずです(私の答えを参照してください) – Alnitak