代码1
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
int main() {
int sv = 0;
printf("父亲进程 %d\n", getpid());
if(fork() == 0) {
printf("子进程1 %d\n", getpid());
} else if(fork() == 0) {
printf("子进程2 %d\n", getpid());
}
wait(&sv);
wait(&sv);
return 0;
}
//执行结果
父亲进程 179
子进程1 180
子进程2 181
//分析
子进程执行第一个if 执行打印
父进程执行第二个if 创建子进程2
子进程2执行打印
|---------打印子进程1
| |-------打印子进程2
| |
--打印父亲进程-----fork--------fork------
代码2
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
int main() {
int sv1 = -1, sv2 = -1;
sv1 = fork();
sv2 = fork();
if(sv1 == 0) {
printf("sv1 %d\n", getpid());
}
if(sv2 == 0) {
printf("sv2 %d\n", getpid());
}
wait(&sv1);
wait(&sv2);
return 0;
}
//执行结果
sv2 225
sv1 224
sv1 226
sv2 226
|----sv1----sv2
|----fork----sv1----( )
| |----( )----sv2
----fork----fork----( )----( )
分析
画拓扑图