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程序的父程序号
這些問題慢慢解決吧