日期:2014-05-16  浏览次数:20687 次

Linux 僵尸进程 ( Zombie or defunct )

            关于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 );        //!> 忽略产生僵尸进程