posix_spawnp を使用してさまざまなプロセスを実行し、(waitpid を使用して) ステータスをチェックして、子が適切に作成されたことを確認します。
int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ);
if (iRet != 0)
{
return false;
}
int iState;
waitpid(static_cast<pid_t>(iPID), &iState, WNOHANG);
cout << "Wait: PID " << iPID << " | State " << iState << endl;
if (WIFEXITED(iState)) {
printf("Child exited with RC=%d\n",WEXITSTATUS(iState));
}
else if (WIFSIGNALED(iState)) {
printf("Child exited via signal %d\n",WTERMSIG(iState));
}
else
{
printf("Child is NORMAL");
}
最初はこれが適切に実行され、次のメッセージが表示されます。
待機: PID 15911 | 状態 0 子は RC=0 で終了しました
同じプロセスを数回実行した後、子プロセスはステータス 127 で終了し始めます。
待機: PID 15947 | 状態 32512 子が RC=127 で終了しました
これが起こった後、私は子供を再び産卵させることができませんでした。上記のコードのセクションを for ループで囲みましたが、適切に生成されません。親プロセスを再起動すると、しばらくは機能しますが、しばらくすると同じ問題が再び発生します。
ここで何が間違っていますか?