【问题标题】:Parent process to monitore and fork new child processes depending on exit status父进程根据退出状态监视和派生新的子进程
【发布时间】:2019-11-18 16:25:52
【问题描述】:

我创建了以下代码:

int main(int argc, char *argv[])
{
        int i, n, N;
        pid_t pid;
        int status;

        N = atoi(argv[1]);

        for(i = 0; i < N; i++) {
                pid = fork();
                if(pid==0) {
                        srand(getpid() * getppid());
                        n = rand() % 10 + 1;
                        printf("I'm child nº %d with childpid %d, parent pid = %d, n = %d\n", i, getpid(), getppid(), n);
                        exit(n);
                }
        }

        while ((pid = waitpid(pid, &status, 0))) {
                if (pid < 0)
                        ;
                else if (WEXITSTATUS(status) < 4)
                        printf("exit status %d lower than 4\n", WEXITSTATUS(status));
        }
        wait(NULL);
        return 0;
}

这个想法是一个父进程分叉 N 个子进程,每个子进程都以随机值退出。我希望我的父进程监视所有子进程并在退出状态为例如 = 4 的状态退出。

【问题讨论】:

  • 所以如果最后一个返回的状态低于 4,就派生一个新的孩子。
  • 但是如果新的孩子再次返回另一个低于 4 的状态会发生什么?
  • 那么它的退出状态可用waitpid接口。所以你检查它的退出状态,然后再次分叉。
  • 我已经在使用waitpid了,这里的问题是子进程可以一直以

标签: c posix


【解决方案1】:

解决了创建一个从父级和子级复制代码的函数(保持 main() 中的代码不变)。父调用函数,函数fork另一个进程,同一个函数中的父在我们选择的条件下递归调用函数。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2013-08-05
    • 2014-04-06
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多