質問
私は別の処理を実行する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ループでは、上記のコードのセクションを囲んだが、それは正しく出現しないであろう。 私は親プロセスを再起動した場合、それはしばらくの間、動作しますが、同じ問題が、しばらくして再び作物ます。
私はここで間違って何をしているのですか?
解決
チェック<のhref = "http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/posix_spawn.htm" のrel = "nofollowをnoreferrer">このリンクするます。
例
それが理由の全体のホストのための127で終了する場合がありますかのようにEINVAL file_actions又はattrpで指定された値が無効である。
posix_spawnとposix_spawnpサブルーチンのエラーコードは、以下の条件によって影響されます。 呼び出し元プロセスが正常にposix_spawnまたはposix_spawnp関数から戻った後、このエラーが発生した場合、子プロセスが終了ステータス127で終了することがあります。
に見えます。
他のヒント
それは問題を抱えていないことを確認するためにwaitpid()
からの戻りコードをチェックします。
コードの読み取り方法は、あなただけ(そうでない場合はループ内waitpid()
コールする必要はないと思います)一度に一つの子プロセスを生成していることを示唆しています。しかし、その場合には、私はWNOHANG
を使用することを期待していない。