我正在尝试使用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
然而,在子进程中调用程序会阻塞整个程序,并且父进程的代码段不会被执行,因为它被子进程阻止。
有没有人知道为什么?
由于
答案 0 :(得分:2)
您是否wait
子进程在父进程中终止?这将阻止孩子实际终止。
或许您有自己的SIGCHLD信号处理程序,它会以某种方式阻塞?
不能想到孩子可以做出父阻止的任何其他方式(好吧,除了任何进程间锁定机制,但你会知道你是否使用过这些)。
此外,如果您不关心子进程何时结束,则应设置
signal(SIGCHLD, SIG_IGN);
这样系统应该自动收获已退出的孩子,而你最终不会得到僵尸。