在此代码片段中:
#include <stdio.h>
int main(int argc, char **argv){
for(int i=0;i<2;i++){
printf("i: %d\n",i);
if(fork() | fork()) {
fork();
}
}
}
问题是数字 1 被打印到 stdout 多少次,它是 7,但我无法弄清楚如何以及为什么,例如函数 fork() 是如何工作的,以便“父亲”进程创建 6 个其他进程?
我认为第一个fork创建了另一个进程(总共2个),第二个fork创建了另外两个进程(总共4个),最后嵌套的fork将创建4个其他进程(总共8个),但情况似乎并非如此,我想我在这里弄乱了一些东西。
建议您这样做,将输出通过管道传输到日志文件并查看一下。
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv){
for(int i=0;i<2;i++){
printf("parentPID:%d: myPID:%d i:%d\n", getppid(), getpid(), i );
if(fork() | fork()) {
fork();
}
}
}