0
まず、私は何かをする子供をフォーク、 と私はwaitpid(-1, &child_status, WNOHANG)
を使用します。親が子を終了するのを待つのではなく、親を続けるようにする。waitpidの場合、子プロセスが終了したかどうかはどのようにわかりますか?
子供がそのプロセスを終了した時期はどうすればわかりますか?
まず、私は何かをする子供をフォーク、 と私はwaitpid(-1, &child_status, WNOHANG)
を使用します。親が子を終了するのを待つのではなく、親を続けるようにする。waitpidの場合、子プロセスが終了したかどうかはどのようにわかりますか?
子供がそのプロセスを終了した時期はどうすればわかりますか?
子プロセスが終了したときに自動的に送信されるSIGCHLD
のシグナルハンドラを設定できます。
シグナルプロセッサは、プログラムの他の部分で定期的にチェックできるグローバルフラグを設定できます。フラグが設定されている場合は、子の終了ステータスを取得するにはwait
またはwaitpid
に電話してください。
int child_exit_flag = 0;
void child_exit(int sig)
{
child_exit_flag = 1;
}
...
signal(SIGCHLD, child_exit);
...
if (child_exit_flag) {
pid_t pid;
int status;
child_exit_flag = 0;
pid = wait(&status);
printf("child pid %d exited with status %d\n", pid, status);
}