创建一个如下图所示的进程树。用getpid()和getppid()梳理其关系。
要注意的是fork之后的子进程和父进程共享代码段,并且如果有写的情况下会有各自的数据段。
#include<stdio.h>
#include<unistd.h>
#include<stdbool.h>
#include<sys/types.h>
int main(int argc, char *argv) {
printf("My pid is %d\n", getpid());
pid_t pid;
// bool flag = false;
int i=0, j=0;
for( i=0; i<3; ++i) {
pid = fork();
if(pid == 0) {
printf("My pid is %d, my parent's pid is %d\n", getpid(), getppid());
if( i == 0) {//if( flag == false) if not OK
//flag=true;
for( j=0; j<2; ++j) {
pid_t pid1=fork();
if(pid1 == 0) {
printf("My pid is %d, my parent's pid is %d\n", getpid(), getppid());
return 0;
}
else {
printf("Process %d create %d\n", getpid(), pid);
}
sleep(1);
}
}
return 0;
}
else {
printf("Process %d create %d\n", getpid(), pid);
}
sleep(1);
}
}