1

申し訳ありませんが、fork() の仕組みに精通していないので、答えは非常に簡単かもしれません。私の質問を詳しく説明すると、たとえば for ループで fork() を複数回実行し、WEXITSTATUS(status) を使用して子から情報を取得した場合、誰の情報を取得するかを決定するものは何ですか?

4

1 に答える 1

2

wait()orwaitpid()関数は死体のPID を返し、ステータス値はその死体に属するステータスです。

int   status;
pid_t corpse = wait(&status);

if (corpse > 0)
{
    if (WIFEXITED(status))
        printf("Process %d died with exit status %d\n", (int)pid, WEXITSTATUS(status));
    else if (WIFSIGNALED(status))
        printf("Process %d died from signal %d\n", (int)pid, WTERMSIG(status));
    else
        printf("Process %d was reported with status 0x%.4X\n", (int)pid, status);
}

ほとんどの実際のシステム (通常は ) でコア ダンプについて調べることができますWCOREDUMP(signal)が、POSIX はそれを標準化していません。elseこの句でカバーされるオプションには、WIFSTOPPEDWIFCONTINUED、およびその他のオプションが含まれます。お使いのシステムのwaitpid()マニュアル ページを参照してください。

于 2013-04-15T05:32:32.320 に答える