Open ccb1900 opened 5 years ago
fork 函数执行之后,父子进程分别继续执行后面的代码。
#include <stdio.h>
#include <unistd.h>
// 创建多个兄弟进程
int createPool(int num);
int main() {
printf("x\n");
int ppid = createPool(2);
if (ppid > 0) {
// 每个子进程执行一次,得到子进程的id
printf("worker child %d pid %d \n",ppid,getpid());
} else if(ppid == 0) {
// 执行一次, 得到的是父进程id
printf("master parent %d pid %d \n",ppid,getpid());
}
// 父子进程都会执行,得到多个进程id。所以这里的代码会执行很多次
// 本质是个时序问题
// 所以如果在此处进fork
printf("y,pid= %d pool = %d\n",getpid(),ppid);
}
int createPool(int num) {
if(num == 0) {
// 执行一次, 得到的是父进程id
printf("master over success=%d\n",getpid());
return 0;
}
int pid = fork();
if (pid == 0) {
// 每个子进程执行一次,得到子进程的id
printf("child success=%d\n",getpid());
return num;
} else if (pid > 0) {
// 每个子进程创建前后 父进程的行为
printf("worker pre=%d\n",getpid());
// 创建子进程
int n = createPool(num-1);
printf("worker after=%d\n",getpid());
return n;
} else {
printf("error\n");
return -1;
}
}