画出下段代码的进程家族数#include <unistd.h> #include <sys/types.h> #include<sys/wait.h>#include <stdio.h> #include <stdlib.h> main () { int status;int pid1,pid2,pid3; pid1=fork();if (pid1< 0) { printf("error in fork pid1!"); exit(0); } else if (pid1 == 0) printf("pid1=0, my process id is %d\n",getpid()); else if (pid1 > 0) { pid2=fork( );if (pid2< 0) { printf("error in fork pid2!"); exit(0); }else if (pid2 == 0)printf("pid2=0, my process id is %d\n",getpid()); else if (pid2 > 0) printf(" pid2>0, my process id is %d\n",getpid()); } pid3=fork();if (pid3< 0) { printf("error in fork pid3!"); exit(0); } else if (pid3 == 0) printf("pid3=0, my process id is %d\n",getpid()); else if (pid3 > 0) printf("pid3>0, my process id is %d\n",getpid());wait(&status);exit(0); }
时间: 2024-01-20 22:02:05 浏览: 398
使用System V信号量和共享内存的进程间通信
根据给出的代码,我们可以画出以下的进程家族树:
```
(main)
/ | \
pid1(子) | pid3(子)
/ | \
pid2(孙) pid2(孙) pid2(孙)
```
进程家族树的解释:
- 根节点为主进程 `main`,即初始进程。
- `main` 进程创建了子进程 `pid1`。
- `pid1` 进程创建了孙进程 `pid2`。
- `pid1` 进程还创建了子进程 `pid3`。
- `pid3` 进程也创建了孙进程 `pid2`。
- `main` 进程等待所有子进程结束后才退出,因此最后只有一个 `wait()` 系统调用,没有 `waitpid()` 系统调用,因此 `main` 进程会等待子进程和孙进程全部结束后才退出。
阅读全文