等待孩子的过程

时间:2012-05-24 08:01:42

标签: c process fork waitpid

这是我的程序的一个片段正在运行,但是纠正它的机器尝试这个:

strace ./watcher echo 2>&1 > /dev/null | grep wait | cut -c1-4

预期输出为:

wait

但我的程序会打印一个随机数的等待(如下所示):

wait
wait
wait
wait
wait
wait

这是代码:

    // creates a child process
    pid_t process_id;
    int status;
    process_id = fork();
    switch(process_id)
    {
        case -1: // Error while making the forkFork failed
            fprintf(stderr, "Fork failed.\n");
            break;

        case 0: // Child process.
            execvp(command[0], command); // command here is char**

            // execvp only returns when error.
            Error(argv[0], 1); // Error just prints the error
            exit(1);
            break;

        default: // Parent process.
            while(!waitpid(process_id, &status, WNOHANG));
            finished(status); // It prints how the process has finished.
    }

我认为问题在于,在内部使用waitpid时,会产生大量的等待。但如果我删除它并单独留下waitpid,我会收到此输出:

standard input: Input/output error

有没有办法在没有收到错误的情况下只进行一次等待?

1 个答案:

答案 0 :(得分:2)

您可能会在WNOHANG的来电中尝试设置waitpid()

这将使waitpid()阻止,直到孩子终止。