什么是僵尸进程,僵尸进程其实是进程的一种状态,即僵尸态。在3.1.3节中,介绍了僵尸态进程的形成。进程的僵尸态与死亡态很接近。唯一不同的是死亡态进程,即进程退出,释放所有资源;而僵尸态进程,即进程退出,但其资源没有得到释放。因此在实际的编程过程中,应尽量关注这一点,避免产生僵尸态的进程,因为僵尸态进程不执行任何任务,但却占有系统资源。如果僵尸态进程太多,则会导致系统浪费。下面将通过一个示例,展示僵尸态进程的产生。
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <sys/types.h>
4
5 int main(int argc, const char *argv[])
6 {
7 pid_t pid;
8
9 pid = fork();
10
11 if(pid < 0){
12 perror("fork error");
13 return -1;
14 }
15 else if(pid == 0){
16 /*child*/
17 printf("The child process, id = %d parent id = %d\n",
18 getpid(), getppid());
19 }
20 else{
21 /*parent*/
22 printf("The parent process, id = %d\n", getpid());
23 while(1);
24 }
25 return 0;
26 }
如上述代码所展示的,如果父进程不退出,子进程退出,此时父进程不会主动回收子进程的资源,子进程成为僵尸进程。