我有一个函数,它分叉一个进程,复制输入和输出缓冲区的文件描述符,然后运行execl一个通过一个名为cmd:
static pid_t
c2b_popen4(const char* cmd, int pin[2], int pout[2], int perr[2], int flags)
{
pid_t ret = fork();
if (ret < 0) {
fprintf(stderr, "fork() failed!\n");
return ret;
}
else if (ret == 0) {
/*
Assign file descriptors to child pipes (not shown)...
*/
execl("/bin/sh", "/bin/sh", "-c", cmd, NULL);
fprintf(stderr, "execl() failed!\n");
exit(EXIT_FAILURE);
}
else {
/*
Close parent read and write pipes (not shown)...
*/
return ret;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
cmd只要我的测试输入正确,每个实例都会正确处理我的数据. …
我有一个程序,要求孩子做一些工作,但我此时只做一个孩子.我正在wait()等待孩子完成,我是否也需要做任何事情SIGCHLD(例如禁用处理程序)?
在我的情况我得到的值,EINTR在errno这使我觉得我需要屏蔽SIGCHLD.
从广义上讲,这是该计划:
fork()execlp()工作计划wait()孩子要完成