如何运行多个具有不同任务的孩子?

问题描述 投票:1回答:1

我的程序必须创建多个子代,我从终端中获取了多个子代。然后,我需要将它们分组,每个分组都有不同的任务。

我创建了孩子,但问题是我无法给他们单独的任务,我无法区分孩子。我唯一能做的是,每个孩子都在同一部分上工作(例如打印pid)。

如何分离它们并赋予它们特定的任务?

例如,前四个孩子应该调用一个函数,其他三个孩子应该打印一些东西,其他三个孩子应该写入文件等。

    pid_t pid[10];

    pid[0] = fork();
    if(pid[0] > 0)
    {
        for(int i = 0; i < 9; i++)
        {
            if(pid[i] > 0)
            {
                pid[i + 1] = fork();
            }
        }
    }

    for(int i = 0; i < 10; i++)
    {   
        if(pid[i] == 0)
        {
            printf("child %d, parent %d\n", getpid(), getppid());
            exit(1);
        }
    }
c fork pid multiple-processes
1个回答
0
投票

我认为您应该看一下fork()函数的工作方式。这是man page,这里是useful answer

[当您在代码中使用fork()时,要知道子进程从父进程继续执行。因此,当您在第一个fork()循环中调用for时,所有子进程将继续父进程已开始的循环。我不认为这是您期望的行为。无论如何,这是您可能遇到的问题的解决方案:

pid_t pid[10];

for (int i = 0; i < 9; i++)
{
    pid[i] = fork();

    //First group            
    if (pid[i] == 0 && i < 4){
        //Insert here the code for the first group or call a fuction
        exit(0);
    }

    //Second group
    if (pid[i] == 0 && i >=4 && i < 8){
        //Insert here the code for the second group or call a fuction
        exit(0);
    }

    //Third group
    if (pid[i] == 0 && i >=8){
        //Insert here the code for the third group or call a fuction
        exit(0);
    }

    if (pid[i] < 0){
        perror("Something wrong with the fork");
        exit(1);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.