相关疑难解决方法(0)

捕获子进程的退出状态代码

我有一个函数,它分叉一个进程,复制输入和输出缓冲区的文件描述符,然后运行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只要我的测试输入正确,每个实例都会正确处理我的数据. …

c fork pid exec

13
推荐指数
1
解决办法
3万
查看次数

如果我只是使用wait()等待一个孩子一次完成,我是否需要对SIGCHLD处理程序执行任何操作?

我有一个程序,要求孩子做一些工作,但我此时只做一个孩子.我正在wait()等待孩子完成,我是否也需要做任何事情SIGCHLD(例如禁用处理程序)?

在我的情况我得到的值,EINTRerrno这使我觉得我需要屏蔽SIGCHLD.

从广义上讲,这是该计划:

  • 读参数
  • for(工作清单)
  • fork()
  • 如果孩子,execlp()工作计划
  • 如果是父母,wait()孩子要完成
  • 当孩子完成时,父循环到下一个工作项

c posix wait

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×2

exec ×1

fork ×1

pid ×1

posix ×1

wait ×1