也许读者们还对这个新概念比较好奇,那就让我们来看一眼Linux里的僵尸进程究竟长什么样子。
当一个进程已退出,但其父进程还没有调用系统调用wait(稍后介绍)对其进行收集之前的这段时间里,它会一直保持僵尸状态,利用这个特点,我们来写一个简单的小程序:
| /* zombie.c */ #include #include main() { pid_t pid; pid=fork(); if(pid<0) /* 如果出错 */ printf("error occurred!n"); else if(pid==0) /* 如果是子进程 */ exit(0); else /* 如果是父进程 */ sleep(60); /* 休眠60秒,这段时间里,父进程什么也干不了 */ wait(NULL); /* 收集僵尸进程 */ } |
编译这个程序:
| $ cc zombie.c -o zombie |
后台运行程序,以使我们能够执行下一条命令:
| $ ./zombie & [1] 1577 |
列一下系统内的进程:
| $ ps -ax ... ... 1177 pts/0 S 0:00 -bash 1577 pts/0 S 0:00 ./zombie 1578 pts/0 Z 0:00 [zombie ] 1579 pts/0 R 0:00 ps -ax |
看到中间的“Z”了吗?那就是僵尸进程的标志,它表示1578号进程现在就是一个僵尸进程。
我们已经学习了系统