【发布时间】:2016-03-04 06:27:33
【问题描述】:
我编写了一个使用 fork() 创建多个进程的程序。现在我正在努力做到每次调用 fork() 时,只有原始父进程产生子进程。例如,如果我给出 4 的参数,我应该让所有 4 个 ppid 及其子级都相同。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int main(int argc, char **argv) {
int i;
int n;
int num_kids;
if(argc != 2) {
fprintf(stderr, "Usage: forkloop <numkids>\n");
exit(1);
}
num_kids = atoi(argv[1]);
for(i = 0; i < num_kids; i++) {
n = fork();
if(n < 0) {
perror("fork");
exit(1);
} else if (n == 0) {
exit(i);
}
printf("pid = %d, ppid = %d, i = %d\n", getpid(), getppid(), i);
}
return 0;
}
当我运行它时,每个 ppid 都是相同的,但每个子 pid 也是相同的。如果我给出 4 作为我的论点,我会得到:
pid = 19765, ppid = 18449, i = 0
pid = 19765, ppid = 18449, i = 1
pid = 19765, ppid = 18449, i = 2
pid = 19765, ppid = 18449, i = 3
孩子的pid应该都一样,还是我的代码有问题?
【问题讨论】:
-
子进程马上退出,做这些打印输出的进程是父进程(每次都是同一个进程)。
-
请不要破坏您的问题。