/*********************************************************************
* Author : Samson
* Date : 02/21/2012
* Test platform:
* GNU Linux version 2.6.29.4
* *******************************************************************/
[samson@UFO]$ ps aux | grep "Z"
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
samson 5817 0.0 0.0 0 0 pts/0 Z+ 23:01 0:00 [tcpserv01] <defunct>samson 5844 0.0 0.0 0 0 pts/0 Z+ 23:09 0:00 [tcpserv01] <defunct>
samson 5866 0.0 0.0 0 0 pts/0 Z+ 23:11 0:00 [tcpserv01] <defunct>
samson 5869 0.0 0.0 0 0 pts/0 Z+ 23:11 0:00 [tcpserv01] <defunct>
samson 5870 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5875 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5876 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5877 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5878 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5879 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5880 0.0 0.0 0 0 pts/0 Z+ 23:12 0:00 [tcpserv01] <defunct>
samson 5967 0.0 0.0 0 0 pts/0 Z+ 23:22 0:00 [tcpserv01] <defunct>
在测试一服务器程序时,当关闭多个子进程后,发现那些子进程都成为了僵死进程,僵死进程存在的目的是维护子进程的信息,以便父进程在以后某个时候获取。这些信息包括子进程的进程ID、终止状态及资源利用信息,若一个进程终止,而此进程有子进程处于僵死状态,那么它的所有僵死子进程的父进程ID将被重置为1(init进程)。继承这些子进程的init进程将清理它们。
使用命令:ps aux | grep "Z"命令得到当前的僵死进程信息,从得到的信息中可看到CPU MEM VSZ 等都为0,好像是没有占用任何的资源的,这应该只是告诉说进程的运行时空间没有占用,但这些信息是存在于内核中的一些表中的,若不对这些僵死进程进行有效处理的话,内核中的进程资源最终将耗尽。对这些僵死进程的处理我们使用wait和waitpid函数进行处理。