Posted on 2009-04-14 15:30
Prayer 閱讀(1076)
評論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
IBM網(wǎng)站有關(guān)Defunct進(jìn)程(死進(jìn)程)的問題確定
內(nèi)容提要:
本文介紹了為什么會產(chǎn)生defunct進(jìn)程,如何確定引起defunct進(jìn)程的原因,以及當(dāng)需要進(jìn)一步確定問題時應(yīng)提供何種信息給軟件供應(yīng)商。
說明:
1.Defunct進(jìn)程的產(chǎn)生
在AIX操作系統(tǒng)實施的進(jìn)程結(jié)構(gòu)中,每一個進(jìn)程都有一個父進(jìn)程。當(dāng)一個進(jìn)程結(jié)束時會通知它的父進(jìn)程,從而該進(jìn)程的父進(jìn)程會收集該進(jìn)程的狀態(tài)信息。若父進(jìn)程在一定的時間內(nèi)無法收集到狀態(tài)信息,則系統(tǒng)中就會殘留一個defunct進(jìn)程。
因為defunct進(jìn)程是已經(jīng)停止的,所以使用殺死進(jìn)程的方法來殺defunct進(jìn)程是無效的。defunct進(jìn)程不使用CPU或硬盤等系統(tǒng)資源,而只使用極少量的內(nèi)存用于存儲退出狀態(tài)和資源使用信息。
#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網(wǎng)站有關(guān)Defunct進(jìn)程(死進(jìn)程)的問題確定
Document #: 2311123000005
Body:
[標(biāo)題]有關(guān)Defunct進(jìn)程(死進(jìn)程)的問題確定
內(nèi)容提要:
本文介紹了為什么會產(chǎn)生defunct進(jìn)程,如何確定引起defunct進(jìn)程的原因,以及當(dāng)需要進(jìn)一步確定問題時應(yīng)提供何種信息給軟件供應(yīng)商。
說明:
1.Defunct進(jìn)程的產(chǎn)生
在AIX操作系統(tǒng)實施的進(jìn)程結(jié)構(gòu)中,每一個進(jìn)程都有一個父進(jìn)程。當(dāng)一個進(jìn)程結(jié)束時會通知它的父進(jìn)程,從而該進(jìn)程的父進(jìn)程會收集該進(jìn)程的狀態(tài)信息。若父進(jìn)程在一定的時間內(nèi)無法收集到狀態(tài)信息,則系統(tǒng)中就會殘留一個defunct進(jìn)程。
因為defunct進(jìn)程是已經(jīng)停止的,所以使用殺死進(jìn)程的方法來殺defunct進(jìn)程是無效的。defunct進(jìn)程不使用CPU或硬盤等系統(tǒng)資源,而只使用極少量的內(nèi)存用于存儲退出狀態(tài)和資源使用信息。
2.問題確定
某一個進(jìn)程在結(jié)束時由它的父進(jìn)程負(fù)責(zé)刪除它。要找到某一個進(jìn)程的父進(jìn)程,執(zhí)行ps -ef命令,輸出中的PPID列給出了一個進(jìn)程的父進(jìn)程的進(jìn)程號。
(1)如果PPID為1應(yīng)該如何做?
如果一個defunct進(jìn)程的PPID為1,則該defunct進(jìn)程的父進(jìn)程為init進(jìn)程。init進(jìn)程是系統(tǒng)中所有進(jìn)程的起源。通常情況下,init進(jìn)程通過將defunct進(jìn)程的PPID設(shè)為1來收回該進(jìn)程。
如果一個defunct進(jìn)程的父進(jìn)程號為1,則需要確認(rèn)該defunct進(jìn)程是否已結(jié)束了若干分鐘。(方法是等幾分鐘后再查看該defunct進(jìn)程是否還存在。)一個系統(tǒng)中,特別是任務(wù)繁忙的系統(tǒng)中,父進(jìn)程為init的defunct進(jìn)程存在1~2分鐘是正常的。defunct進(jìn)程經(jīng)常由復(fù)雜的shell腳本程序產(chǎn)生,這種情況通常是正常的,并不能說明有問題存在。
當(dāng)init進(jìn)程沒有處理完/etc/inittab文件而在等其中的某一項命令結(jié)束(通常是一個/etc/rc腳本)時,可能會發(fā)生問題。在這時候,init進(jìn)程會忽略掉其它所有結(jié)束的子進(jìn)程,而只等這個特定的子進(jìn)程結(jié)束。由一個掛起的/etc/inittab文件中的任務(wù)引起的問題的征兆是:父進(jìn)程為init的defunct進(jìn)程無限制的增長。在AIX4.3及以后的版本中,init進(jìn)程的功能被增強(qiáng),用以有效地處理defunct進(jìn)程。
如果/etc/inittab文件中含有類似下一行的項,則刪除它:
install_assist:2:wait:/usr/lib/lpd/pio/etc/pioinit > /dev/null 2>&1
該進(jìn)程會引起defunct進(jìn)程。該項應(yīng)在初始化安裝結(jié)束后被自動刪除。
(2)如果PPID不為1應(yīng)該如何做?
如果父進(jìn)程號不為1,則相應(yīng)的父進(jìn)程應(yīng)負(fù)責(zé)收回結(jié)束的子進(jìn)程。未收回子進(jìn)程的原因之一是shell管道。系統(tǒng)中的許多命令都不會產(chǎn)生子進(jìn)程,這些進(jìn)程也無法處理那些結(jié)束的子進(jìn)程。這種情況在一個shell管道中有一個或多個短時進(jìn)程及一個和多個長時間進(jìn)程時更為明顯。一個defunct進(jìn)程會在它的父進(jìn)程運行期間一直存在。
任何一個程序在產(chǎn)生子進(jìn)程時都應(yīng)負(fù)責(zé)在子進(jìn)程結(jié)束時收回它們。如果程序在編寫中沒有考慮到處理它們產(chǎn)生的子進(jìn)程,則該程序存在問題。
3.如果需要對問題做進(jìn)一步確認(rèn),如何做?
如果確認(rèn)一個進(jìn)程是defunct進(jìn)程,并且該進(jìn)程應(yīng)該被它的父進(jìn)程收回,則可能需要提供下面的信息給應(yīng)用軟件供應(yīng)商用以分析問題產(chǎn)生的可能原因:
(1)下面命令的輸出:
# ps -ef
(2)下面命令的輸出:
# who -a
(3)/etc/inittab 文件
(4)下面命令的輸出:
SLOT=`expr
/ 256`
(echo u $SLOT ; echo trace -k $SLOT) | crash >
其中,
是defunct進(jìn)程的父進(jìn)程號, 是輸出文件的文件名。
現(xiàn)在僅僅明白了僵尸進(jìn)程產(chǎn)生原因,除了重啟機(jī)器好像沒有什么更好的辦法
疑問:1.在AIX 5.1上面發(fā)現(xiàn)仍然存在defunct進(jìn)程
2.在ps -ef中看不到defunct進(jìn)程,現(xiàn)在只會在who -d命令中看到,找不到defunct進(jìn)程的父進(jìn)程號
這些問題慢慢解決吧