日期:2014-05-16 浏览次数:20687 次
关于Linux僵尸进程,一般是由于子进程结束的时候,会有一些资源没有释放掉,直到父进程结束或者由父进程去处理它才可以!
僵尸进程就是子进程已经结束,但是父进程没有处理的进程!
父进程可以使用waitpid,wait等来处理僵尸进程!
if 父进程不幸在子进程之前“死了”,那么子进程就交由init( pid == 1 )进程去管理~
我们可以测试以下:
具体的程序解释看代码的注释!
gcc -o 1 1.c
我的机子上运行结果:
2747 pts/0 00:00:00 bash
2768 pts/0 00:00:00 1 //!> 看:这个就是父进程
2769 pts/0 00:00:00 1 <defunct> //!> 看:这个就是子进程成为僵尸进程
2772 pts/1 00:00:00 bash
2802 pts/1 00:00:00 ps
pengtao@ubuntu:~$
//!> 10s 之后我打开第二个终端ps -e
2747 pts/0 00:00:00 bash
2768 pts/0 00:00:00 1 //!> 没有咯~~~呵呵~~~
2772 pts/1 00:00:00 bash
2805 pts/2 00:00:00 bash
2821 pts/2 00:00:00 ps
pengtao@ubuntu:~$
当然我们可以使用忽略信号,使得不产生僵尸进程!
signal( SIGCHLD, SIG_IGN ); //!> 忽略产生僵尸进程