我的程序必须创建多个子代,我从终端中获取了多个子代。然后,我需要将它们分组,每个分组都有不同的任务。
我创建了孩子,但问题是我无法给他们单独的任务,我无法区分孩子。我唯一能做的是,每个孩子都在同一部分上工作(例如打印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);
}
}
我认为您应该看一下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);
}
}