質問

私は別の処理を実行する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">このリンクするます。

  

EINVAL file_actions又はattrpで指定された値が無効である。

     

posix_spawnとposix_spawnpサブルーチンのエラーコードは、以下の条件によって影響されます。   呼び出し元プロセスが正常にposix_spawnまたはposix_spawnp関数から戻った後、このエラーが発生した場合、子プロセスが終了ステータス127で終了することがあります。

それが理由の全体のホストのための127で終了する場合がありますかのように

に見えます。

他のヒント

それは問題を抱えていないことを確認するためにwaitpid()からの戻りコードをチェックします。

コードの読み取り方法は、あなただけ(そうでない場合はループ内waitpid()コールする必要はないと思います)一度に一つの子プロセスを生成していることを示唆しています。しかし、その場合には、私はWNOHANGを使用することを期待していない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top