0

我正在尝试使用 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

但是子进程中程序的调用阻塞了整个程序,而父代码段因为被子进程阻塞而没有被执行。

有谁知道为什么?

谢谢

4

1 回答 1

2

你是否wait为子进程终止于父进程?这将阻塞,直到孩子实际终止。

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

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

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

signal(SIGCHLD, SIG_IGN);

这样系统应该会自动收割退出的孩子,而你不会以僵尸告终。

于 2012-10-28T14:17:12.273 回答