分叉 - 儿童人数

时间:2014-04-02 21:12:35

标签: c fork

所以我有一个函数,它接受一个参数n,它是一个表示要分叉的子节点数的int,并将打印所有已经分叉的子节点的pid。所以这个函数的目标是分叉n个孩子,每个孩子打印出它的pid。我是新的分叉,不知道如何完成这样的任务。

提前感谢您提供的任何帮助:)

这就是我现在拥有的,它似乎正在起作用,但程序一旦完成就永远不会结束。我该怎么办

 void print_child_pid(int n) {
int i;
pid_t pid; 
for (i = 1; i <= n; i++) {
    pid = fork();
    if (pid == -1) {
        /* error handling here, if needed */
        return;
    }
    if (pid == 0) {
        printf("child: process id = %d\n", getpid());
        wait();
        return;
    }
}

return; 

}

1 个答案:

答案 0 :(得分:1)

当你在父进程中调用wait时,你已经关闭但在子进程中调用了waitpidwikipedia对此有一个很好的解释。我已修改下面的代码以使用它。

void print_child_pid(int n) {
    int i;
    pid_t pid; 
    for (i = 1; i <= n; i++) {
        pid = fork();
        if (pid == -1) {
            /* error handling here, if needed */
        }
        if (pid == 0) {
            printf("child: process id = %d\n", getpid());
            return;
        }else{
            int status;
            (void)waitpid(pid, &status, 0);
        }
    }
}

输出n = 4:

child: process id = 9363
child: process id = 9364
child: process id = 9365
child: process id = 9366