所以我有一个函数,它接受一个参数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;
}
答案 0 :(得分:1)
当你在父进程中调用wait
时,你已经关闭但在子进程中调用了waitpid
。 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