亲子过程沟通

时间:2011-03-20 12:52:04

标签: c linux fork

我在C程序中,我正在使用fork()系统调用来创建子进程。如何从child-> parent传输值?可以在父进程的某处检索子进程的退出代码吗? ..谢谢

2 个答案:

答案 0 :(得分:3)

您可能对wait()和waitpid()感兴趣,请参阅http://linux.die.net/man/2/waitpid

这是使用waitpid()的非阻塞示例:

pid_t child;
int child_status, status;

switch(child = fork()) {
        case 0:
                /* child process */
                do_silly_children_stuff();
                exit(42);
        case -1:
                /* fork() error */
                do_some_recovery();
                break;
        default:
                /* parent process */
                do_parenting_stuff();
                break;
}

// busy-wait for child to exit
for (;;) {
        status = waitpid(child, &child_status, WNOHANG);

        switch (status) {
                case -1:
                        /* waitpid() error */
                        break;
                case 0:
                        /* child hasn't exited yet */
                        break;
                default:
                        /* child with PID $child has exited with return value     $child_status */
                        break;

        }
}

请注意,我没有测试上面的代码。

对于一般的异步进程间通信,您可以使用管道(pipe()),套接字,共享内存或 - 当心 - 文件。

答案 1 :(得分:0)

在父进程中使用waitpid(pid)

pid_t waitpid(pid_t pid, int *status, int options);

说明

waitpid函数暂停当前进程的执行,直到pid参数指定的子进程退出,或者直到传递了一个信号,其动作是终止当前进程或调用信号处理函数。如果pid请求的子节点在调用时已经退出(所谓的“僵尸”进程),则该函数立即返回。释放子项使用的任何系统资源。

http://linux.about.com/library/cmd/blcmdl2_waitpid.htm