我寫了一個用fork()創建多個進程的程序。現在我試圖讓它每次調用fork()時,只有原始的父進程生成子進程。例如,如果我給出4的論點,我應該讓所有4個ppid都是相同的,並且它的孩子。C - 原始父進程的子代
#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的都是相同的,或者是有什麼錯我的代碼?
子進程退出的馬上,做這些打印輸出的過程是父進程(每次都是相同的進程)。 – skyking
請不要污衊你的問題。 – rene