fork()阻止父进程

时间:2012-10-28 13:55:53

标签: c posix fork nonblocking

我正在尝试使用fork()以非阻塞方式在程序中运行程序。

pid = fork();

//check for errors
if (pid < 0) {
    exit(1);
}

//the child process runs the gulp
if (pid == 0) {
    if (execv("/home/gulpSniffer/programname", args) < 0) {
        exit(1);
    }
    //child is supposed to block here
}

//father is supposed to continue its run from here

然而,在子进程中调用程序会阻塞整个程序,并且父进程的代码段不会被执行,因为它被子进程阻止。

有没有人知道为什么?

由于

1 个答案:

答案 0 :(得分:2)

您是否wait子进程在父进程中终止?这将阻止孩子实际终止。

或许您有自己的SIGCHLD信号处理程序,它会以某种方式阻塞?

不能想到孩子可以做出父阻止的任何其他方式(好吧,除了任何进程间锁定机制,但你会知道你是否使用过这些)。

此外,如果您不关心子进程何时结束,则应设置

signal(SIGCHLD, SIG_IGN);

这样系统应该自动收获已退出的孩子,而你最终不会得到僵尸。