Defunct进程(死进程)
IBM网站有关Defunct进程(死进程)的问题确定
内容提要:
本文介绍了为什么会产生defunct进程,如何确定引起defunct进程的原因,以及当需要进一步确定问题时应提供何种信息给软件供应商。
说明:
1.Defunct进程的产生
在AIX操作系统实施的进程结构中,每一个进程都有一个父进程。当一个进程结束时会通知它的父进程,从而该进程的父进程会收集该进程的状态信息。若父进程在一定的时间内无法收集到状态信息,则系统中就会残留一个defunct进程。
因为defunct进程是已经停止的,所以使用杀死进程的方法来杀defunct进程是无效的。defunct进程不使用CPU或硬盘等系统资源,而只使用极少量的内存用于存储退出状态和资源使用信息。
#who -d可以看到好多
# who -d
. . Aug 10 21:33 . 5480 id=load64b term=0 exit=0
. . Aug 10 21:33 . 15494 id=rc term=0 exit=0
. . Aug 10 21:33 . 15496 id=fbcheck term=0 exit=0
. . Aug 10 21:33 . 16258 id=harc term=0 exit=0
. . Aug 10 21:33 . 16260 id=rcnsr term=0 exit=0
. . Aug 10 21:33 . 17584 id=piobe term=0 exit=0
. . Aug 10 21:33 . 18588 id=logsymp term=0 exit=0
. . Aug 10 21:33 . 17076 id=pmd term=0 exit=0
. . Aug 10 21:33 . 17078 id=httpdli term=0 exit=0
. . Aug 10 21:33 . 18326 id=diagd term=0 exit=0
. . Aug 10 21:33 . 20384 id=rcpkcs1 term=0 exit=0
. . Aug 10 21:34 . 20386 id=imnss term=0 exit=0
. . Aug 10 21:34 . 20132 id=imqss term=0 exit=0
. . Aug 10 21:33 . 21430 id=l2 term=0 exit=0
. . Aug 10 21:34 . 19352 id=i4ls term=0 exit=0
. . Aug 10 21:34 . 19354 id=hacmp60 term=0 exit=0
. . Aug 10 21:35 . 25304 id=rctcpip term=0 exit=0
. . Aug 10 21:35 . 24900 id=rcnfs term=0 exit=0
. . Aug 10 21:35 . 27356 id=qdaemon term=0 exit=0
. . Aug 10 21:35 . 27358 id=writesr term=0 exit=0
. . Aug 10 21:35 . 27360 id=clinit term=0 exit=0
. . Aug 10 21:35 . 27362 id=pst_cli term=0 exit=0
. pts/2 Sep 02 18:24 5:02 33348 id=pts/2 term=1 exit=0
. pts/5 Sep 01 10:31 2:24 40934 id=pts/5 term=1 exit=0
. pts/6 Sep 02 15:43 6:23 46092 id=pts/6 term=0 exit=0
. pts/7 Sep 02 15:42 6:25 51382 id=pts/7 term=1 exit=0
. pts/8 Sep 01 17:58 old 38490 id=pts/8 term=0 exit=0
. pts/9 Sep 01 17:06 old 24254 id=pts/9 term=1 exit=0
. pts/10 Sep 01 15:39 old 38232 id=pts/10 term=0 exit=0
#man who
....
-d Displays all processes that have expired without being regenerated by init.
The exit field appears for dead processes and contains the termination and exit
determining why a process ended by looking at the error number returned by the
application.)
...
IBM网站有关Defunct进程(死进程)的问题确定
Document #: 2311123000005
Body:
[标题]有关Defunct进程(死进程)的问题确定
内容提要:
本文介绍了为什么会产生defunct进程,如何确定引起defunct进程的原因,以及当需要进一步确定问题时应提供何种信息给软件供应商。
说明:
1.Defunct进程的产生
在AIX操作系统实施的进程结构中,每一个进程都有一个父进程。当一个进程结束时会通知它的父进程,从而该进程的父进程会收集该进程的状态信息。若父进程在一定的时间内无法收集到状态信息,则系统中就会残留一个defunct进程。
因为defunct进程是已经停止的,所以使用杀死进程的方法来杀defunct进程是无效的。defunct进程不使用CPU或硬盘等系统资源,而只使用极少量的内存用于存储退出状态和资源使用信息。
2.问题确定
某一个进程在结束时由它的父进程负责删除它。要找到某一个进程的父进程,执行ps -ef命令,输出中的PPID列给出了一个进程的父进程的进程号。
(1)如果PPID为1应该如何做?
如果一个defunct进程的PPID为1,则该defunct进程的父进程为init进程。init进程是系统中所有进程的起源。通常情况下,init进程通过将defunct进程的PPID设为1来收回该进程。
如果一个defunct进程的父进程号为1,则需要确认该defunct进程是否已结束了若干分钟。(方法是等几分钟后再查看该defunct进程是否还存在。)一个系统中,特别是任务繁忙的系统中,父进程为init的defunct进程存在1~2分钟是正常的。defunct进程经常由复杂的shell脚本程序产生,这种情况通常是正常的,并不能说明有问题存在。
当init进程没有处理完/etc/inittab文件而在等其中的某一项命令结束(通常是一个/etc/rc脚本)时,可能会发生问题。在这时候,init进程会忽略掉其它所有结束的子进程,而只等这个特定的子进程结束。由一个挂起的/etc/inittab文件中的任务引起的问题的征兆是:父进程为init的defunct进程无限制的增长。在AIX4.3及以后的版本中,init进程的功能被增强,用以有效地处理defunct进程。
如果/etc/inittab文件中含有类似下一行的项,则删除它:
install_assist:2:wait:/usr/lib/lpd/pio/etc/pioinit > /dev/null 2>&1
该进程会引起defunct进程。该项应在初始化安装结束后被自动删除。
(2)如果PPID不为1应该如何做?
如果父进程号不为1,则相应的父进程应负责收回结束的子进程。未收回子进程的原因之一是shell管道。系统中的许多命令都不会产生子进程,这些进程也无法处理那些结束的子进程。这种情况在一个shell管道中有一个或多个短时进程及一个和多个长时间进程时更为明显。一个defunct进程会在它的父进程运行期间一直存在。
任何一个程序在产生子进程时都应负责在子进程结束时收回它们。如果程序在编写中没有考虑到处理它们产生的子进程,则该程序存在问题。
3.如果需要对问题做进一步确认,如何做?
如果确认一个进程是defunct进程,并且该进程应该被它的父进程收回,则可能需要提供下面的信息给应用软件供应商用以分析问题产生的可能原因:
(1)下面命令的输出:
# ps -ef
(2)下面命令的输出:
# who -a
(3)/etc/inittab 文件
(4)下面命令的输出:
SLOT=`expr / 256`
(echo u $SLOT ; echo trace -k $SLOT) | crash >
其中,是defunct进程的父进程号, 是输出文件的文件名。
现在仅仅明白了僵尸进程产生原因,除了重启机器好像没有什么更好的办法
疑问:1.在AIX 5.1上面发现仍然存在defunct进程
2.在ps -ef中看不到defunct进程,现在只会在who -d命令中看到,找不到defunct进程的父进程号
这些问题慢慢解决吧