首页 文章

分叉 - 儿童人数

提问于
浏览
-1

所以我有一个函数,它接受一个参数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 回答

  • 1

    你很接近,但是当你在父进程中调用 waitpid 时,你在子进程中调用 wait . 在wikipedia上有一个很好的解释 . 我已修改下面的代码以使用它 .

    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
    

相关问题