C fork()和原始父进程的子进程
我编写了一个程序,用fork()创建多个进程。现在,我正试图使它在每次调用fork()时,只有原始父进程生成子进程。例如,如果我给出一个参数4,我应该让所有4个ppid及其子项都相同C fork()和原始父进程的子进程,c,process,fork,C,Process,Fork,我编写了一个程序,用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; i
#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;
}
子pid是否都相同,或者我的代码是否有问题?请不要与
fork()的返回值混淆:
不要与fork()
的返回值混淆:
此行由原始进程执行。也许你想在孩子身上执行它。但这孩子刚刚离开。
}
return 0;
}
此行由原始进程执行。也许你想在孩子身上执行它。但这孩子刚刚离开。
}
return 0;
}
林克为你解释事情
在你写这句话的时候
printf("pid = %d, ppid = %d, i = %d\n", getpid(), getppid(), i);
此行由父进程而不是子进程处理。
变量“n”存储创建fork后的返回值(成功创建时为0)。因此,为了获得子进程的进程ID,您必须将内部代码取出
else if (n == 0) { //child process
exit(i);
}
希望有帮助。链接为您解释了一些事情
在你写这句话的时候
printf("pid = %d, ppid = %d, i = %d\n", getpid(), getppid(), i);
此行由父进程而不是子进程处理。
变量“n”存储创建fork后的返回值(成功创建时为0)。因此,为了获得子进程的进程ID,您必须将内部代码取出
else if (n == 0) { //child process
exit(i);
}
希望有帮助。子进程立即退出,进行打印输出的进程是父进程(每次都是同一进程)。请不要诋毁您的问题。子进程立即退出,进行打印输出的进程是父进程(每次都是同一进程).请不要诋毁你的问题。
}
printf("pid = %d, ppid = %d, i = %d\n", getpid(), getppid(), i);
return 0;
}
printf("pid = %d, ppid = %d, i = %d\n", getpid(), getppid(), i);
else if (n == 0) { //child process
exit(i);
}