亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 3008 | 回復(fù): 0
打印 上一主題 下一主題

linux進(jìn)程狀態(tài)D [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-12-23 14:00 |只看該作者 |倒序?yàn)g覽
運(yùn)行在KVM虛擬機(jī)里的一些進(jìn)程突然出了問題,這些出了問題的進(jìn)程無(wú)法用kill殺掉,使用ps可以看到這些進(jìn)程處于D狀態(tài):
[build@kbuild-john ~]$ ps -a -ubuild -o pid,ppid,stat,command
  PID  PPID STAT COMMAND
17009     1 Ds   -bash
17065     1 D    ls --color=tty -al
17577     1 D    /usr/java/jdk1.5.0_17/bin/java -Xmx512m -classpath /usr/local/a
17629     1 D    /usr/java/jdk1.5.0_17/bin/java -Xmx512m -classpath /usr/local/a
ps 的手冊(cè)里說D狀態(tài)是uninterruptible sleep,Linux進(jìn)程有兩種睡眠狀態(tài),一種interruptible sleep,處在這種睡眠狀態(tài)的進(jìn)程是可以通過給它發(fā)信號(hào)來(lái)喚醒的,比如發(fā)HUP信號(hào)給nginx的master進(jìn)程可以讓nginx重新加載配置文件而不需要重新啟動(dòng)nginx進(jìn)程;另外一種睡眠狀態(tài)是uninterruptible sleep,處在這種狀態(tài)的進(jìn)程不接受外來(lái)的任何信號(hào),這也是為什么之前我無(wú)法用kill殺掉這些處于D狀態(tài)的進(jìn)程,無(wú)論是”kill”, “kill -9″還是”kill -15″,因?yàn)樗鼈儔焊鶅壕筒皇苓@些信號(hào)的支配。
進(jìn)程為什么會(huì)被置于uninterruptible sleep狀態(tài)呢?處于uninterruptible sleep狀態(tài)的進(jìn)程通常是在等待IO,比如磁盤IO,網(wǎng)絡(luò)IO,其他外設(shè)IO,如果進(jìn)程正在等待的IO在較長(zhǎng)的時(shí)間內(nèi)都沒有響應(yīng),那么就很會(huì)不幸地被 ps看到了,同時(shí)也就意味著很有可能有IO出了問題,可能是外設(shè)本身出了故障,也可能是比如掛載的遠(yuǎn)程文件系統(tǒng)已經(jīng)不可訪問了,我這里遇到的問題就是由 down掉的NFS服務(wù)器引起的。
正是因?yàn)榈貌坏絀O的相應(yīng),進(jìn)程才進(jìn)入了uninterruptible sleep狀態(tài),所以要想使進(jìn)程從uninterruptible sleep狀態(tài)恢復(fù),就得使進(jìn)程等待的IO恢復(fù),比如如果是因?yàn)閺倪h(yuǎn)程掛載的NFS卷不可訪問導(dǎo)致進(jìn)程進(jìn)入uninterruptible sleep狀態(tài)的,那么可以通過恢復(fù)該NFS卷的連接來(lái)使進(jìn)程的IO請(qǐng)求得到滿足,除此之外,要想干掉處在D狀態(tài)進(jìn)程就只能重啟整個(gè)Linux系統(tǒng)了。
看到有人說如果要想殺掉D狀態(tài)的進(jìn)程,通?梢匀⒌羲母高M(jìn)程(通常是shell,我理解的這種情況是在shell下直接運(yùn)行的該進(jìn)程,之后該進(jìn)程轉(zhuǎn)入了D狀態(tài)),于是我就照做了,之后就出現(xiàn)了上面的狀態(tài):他們的父進(jìn)程被殺掉了,但是他們的父進(jìn)程PID都變成了1,也就是init進(jìn)程,這下可如何是好?此時(shí)我這些D狀態(tài)的進(jìn)程已經(jīng)影響到其他一些進(jìn)程的運(yùn)行,而已經(jīng)無(wú)法訪問的NFS卷又在段時(shí)間內(nèi)無(wú)法恢復(fù),那么,只好重新啟動(dòng)了,root不是玉皇大帝,也有無(wú)奈的時(shí)候。
跟czhang說起這個(gè)事,覺得Linux如果有這么一個(gè)專用的垃圾回收進(jìn)程就好了:系統(tǒng)自動(dòng)或者用戶手動(dòng)把僵尸進(jìn)程,和比如之前我遇到的D狀態(tài)進(jìn)程的PPID設(shè)為這個(gè)垃圾回收進(jìn)程,那么通過干掉這個(gè)垃圾回收進(jìn)程來(lái)清理這些僵尸們,這樣該有多美好…
原文地址:http://blog.xupeng.me/2009/07/09/linux-uninterruptible-sleep-state/
長(zhǎng)期生活在 Linux 環(huán)境里,漸漸地就有一種環(huán)保意識(shí)油然而生。比如,我們會(huì)在登錄提示里寫上“悟空,我跟你說過叫你不要亂扔?xùn)|西,亂扔?xùn)|西是不對(duì)的。哎呀我話沒說完你怎么把棍子扔掉了?月光寶盒是寶物,亂扔它會(huì)污染環(huán)境,要是砸到小朋友怎么辦?就算砸不到小朋友,砸到了花花草草也不好嘛...”;在用戶缺省目錄里放一個(gè)題為 “自覺保護(hù)環(huán)境 請(qǐng)勿堆放垃圾”的空文件,并用 chattr +i 設(shè)為不可修改;看到垃圾文件就立即掃入 /tmp 目錄,然后發(fā)廣播通知垃圾制造者自己去 /tmp 認(rèn)領(lǐng),且警告其下不為例...我們深知,系統(tǒng)環(huán)境的整潔有利于系統(tǒng)管理員保持良好的心情、清晰的思路和穩(wěn)定的工作狀態(tài)。
有一類垃圾卻并非這么容易打掃,那就是我們常見的狀態(tài)為 D (Uninterruptible sleep) ,以及狀態(tài)為 Z (Zombie) 的垃圾進(jìn)程。這些垃圾進(jìn)程要么是求而不得,像怨婦一般等待資源(D),要么是僵而不死,像冤魂一樣等待超度(Z),它們?cè)?CPU run_queue 里滯留不去,把 Load Average 弄的老高老高,沒看過我前一篇blog的國(guó)際友人還以為這兒民怨沸騰又出了什么大事呢。怎么辦?開槍!kill -9!看你們走是不走。但這兩種垃圾進(jìn)程偏偏是刀槍不入的,不管換哪種槍法都?xì)⒉坏羲鼈。無(wú)奈,只好reboot,像剿滅禽流感那樣不分青紅皂白地一律撲殺!
悟空,我們所運(yùn)維的可是24*7全天候?qū)ν獠靠蛻舴⻊?wù)的系統(tǒng),怎么能動(dòng)不動(dòng)就 reboot ?我們的考核指標(biāo)可是4個(gè)9(99.99%,全年計(jì)劃外當(dāng)機(jī)時(shí)間不得超過52分鐘34秒),又不是4個(gè)8,你稍微遇到點(diǎn)事就reboot,還要不要可用性了?再說,現(xiàn)在社會(huì)都開始奔和諧去了,我們對(duì)于 D 和 Z 這兩種垃圾進(jìn)程,也該盡可能采取慈悲手段,能解決其困難的,就創(chuàng)造條件,解決其實(shí)際困難,能消除其冤結(jié)的,就誦經(jīng)燒紙,消除其前世冤結(jié),具體問題應(yīng)具體分析具體解決,濫殺無(wú)辜只會(huì)導(dǎo)致冤冤相報(bào)因果循環(huán)...$^#$%#%^@#
貧僧還是回來(lái)說正題。怨婦 D,往往是由于 I/O 資源得不到滿足,而引發(fā)等待,在內(nèi)核源碼 fs/proc/array.c 里,其文字定義為“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打頭字母),對(duì)應(yīng)著 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。舉個(gè)例子,當(dāng) NFS 服務(wù)端關(guān)閉之時(shí),若未事先 umount 相關(guān)目錄,在 NFS 客戶端執(zhí)行 df 就會(huì)掛住整個(gè)登錄會(huì)話,按 Ctrl+C 、Ctrl+Z 都無(wú)濟(jì)于事。斷開連接再登錄,執(zhí)行 ps axf 則看到剛才的 df 進(jìn)程狀態(tài)位已變成了 D ,kill -9 無(wú)法殺滅。正確的處理方式,是馬上恢復(fù) NFS 服務(wù)端,再度提供服務(wù),剛才掛起的 df 進(jìn)程發(fā)現(xiàn)了其苦苦等待的資源,便完成任務(wù),自動(dòng)消亡。若 NFS 服務(wù)端無(wú)法恢復(fù)服務(wù),在 reboot 之前也應(yīng)將 /etc/mtab 里的相關(guān) NFS mount 項(xiàng)刪除,以免 reboot 過程例行調(diào)用 netfs stop 時(shí)再次發(fā)生等待資源,導(dǎo)致系統(tǒng)重啟過程掛起。
冤魂 Z 之所以殺不死,是因?yàn)樗呀?jīng)死了,否則怎么叫 Zombie(僵尸)呢?冤魂不散,自然是生前有結(jié)未解之故。在UNIX/Linux中,每個(gè)進(jìn)程都有一個(gè)父進(jìn)程,進(jìn)程號(hào)叫PID(Process ID),相應(yīng)地,父進(jìn)程號(hào)就叫PPID(Parent PID)。當(dāng)進(jìn)程死亡時(shí),它會(huì)自動(dòng)關(guān)閉已打開的文件,舍棄已占用的內(nèi)存、交換空間等等系統(tǒng)資源,然后向其父進(jìn)程返回一個(gè)退出狀態(tài)值,報(bào)告死訊。如果程序有 bug,就會(huì)在這最后一步出問題。兒子說我死了,老子卻沒聽見,沒有及時(shí)收棺入殮,兒子便成了僵尸。在UNIX/Linux中消滅僵尸的手段比較殘忍,執(zhí)行 ps axjf 找出僵尸進(jìn)程的父進(jìn)程號(hào)(PPID,第一列),先殺其父,然后再由進(jìn)程天子 init(其PID為1,PPID為0)來(lái)一起收拾父子僵尸,超度亡魂,往生極樂。注意,子進(jìn)程變成僵尸只是礙眼而已,并不礙事,如果僵尸的父進(jìn)程當(dāng)前有要?jiǎng)?wù)在身,則千萬(wàn)不可貿(mào)然殺之。
關(guān)于ZOMBIE進(jìn)程:
這些進(jìn)程已經(jīng)死亡,但沒有釋放系統(tǒng)資源,包括內(nèi)存和一些一些系統(tǒng)表等,如果這樣的進(jìn)程很多,會(huì)引發(fā)系統(tǒng)問題。用ps -el看出的進(jìn)程狀態(tài)如果是Z,就是僵尸進(jìn)程。
ps -ef|grep defunc可以找出僵尸進(jìn)程.
有些ZOMBIE進(jìn)程時(shí)用kill -9也不能殺死,而且消耗了很多系統(tǒng)資源不能釋放,如果系統(tǒng)在shutdown時(shí)發(fā)出信息:some process wouldn’t die. 這就意味這有些進(jìn)程不能被reboot發(fā)出的kill –9殺掉,這些很可能就是僵尸進(jìn)程。
可以用ps 的 – l 選項(xiàng),得到更詳細(xì)的進(jìn)程信息.
F(Flag):一系列數(shù)字的和,表示進(jìn)程的當(dāng)前狀態(tài)。這些數(shù)字的含義為:
00:若單獨(dú)顯示,表示此進(jìn)程已被終止。
01:進(jìn)程是核心進(jìn)程的一部分,常駐于系統(tǒng)主存。如:    sched、 vhand 、bdflush 等。
02:Parent is tracing process.
04 :Tracing parent's signal has stopped the process; the parent is waiting ( ptrace(S)).
10:進(jìn)程在優(yōu)先級(jí)低于或等于25時(shí),進(jìn)入休眠狀態(tài),而且不能用信號(hào)喚醒,例如在等待一個(gè)inode被創(chuàng)建時(shí)   
20:進(jìn)程被裝入主存(primary memory)
40:進(jìn)程被鎖在主存,在事務(wù)完成前不能被置換   e
S(state of? the process )
O:進(jìn)程正在處理器運(yùn)行  ms這個(gè)狀態(tài)從來(lái)木見過, 倒是R常見
S:休眠狀態(tài)(sleeping)
R:等待運(yùn)行(runable)    R Running or runnable (on run queue) 進(jìn)程處于運(yùn)行或就緒狀態(tài)
I:空閑狀態(tài)(idle)
Z:僵尸狀態(tài)(zombie)   
T:跟蹤狀態(tài)(Traced)
B:進(jìn)程正在等待更多的內(nèi)存頁(yè)
D:不可中斷的深度睡眠,一般由IO引起,同步IO在做讀或?qū)懖僮鲿r(shí),cpu不能做其它事情,只能等待,這時(shí)進(jìn)程處于這種狀態(tài),如果程序采用異步IO,這種狀態(tài)應(yīng)該就很少見到了
C(cpu usage):cpu利用率的估算值
清除ZOMBIE(僵尸)進(jìn)程可以使用如下方法:
1> kill –18 PPID (PPID是其父進(jìn)程)
這個(gè)信號(hào)是告訴父進(jìn)程,該子進(jìn)程已經(jīng)死亡了,請(qǐng)收回分配給他的資源。
2>如果不行則看能否終止其父進(jìn)程(如果其父進(jìn)程不需要的話)。先看其父進(jìn)程又無(wú)其他子進(jìn)程,如果有,可能需要先kill其他子進(jìn)程,也就是兄弟進(jìn)程。方法是:
kill –15 PID1 PID2(PID1,PID2是僵尸進(jìn)程的父進(jìn)程的其它子進(jìn)程)。
然后再kill父進(jìn)程:kill –15 PPID  這樣僵尸進(jìn)程就可能被完全殺掉了。
原文地址:http://blog.csdn.net/eroswang/archive/2007/09/06/1774298.aspx
如何殺掉D狀態(tài)的進(jìn)程?
基本想法就是修改內(nèi)核,遍歷進(jìn)程列表,找到處于D狀態(tài)的進(jìn)程,將其狀態(tài)轉(zhuǎn)換為別的狀態(tài)就可以kill掉了。
這是一種比較粗魯?shù)姆椒,可能?huì)引起一些不良后果,暫時(shí)沒有考慮。對(duì)于確切知道已經(jīng)沒有什么用處,不用做清理工作的,處于D狀態(tài)怎么也殺不死的進(jìn)程來(lái)說,確是很有效。
內(nèi)核模塊代碼:
----------------killd.c----------------
#include
#include
#include  //for_each_process
MODULE_LICENSE("BSD");
static int pid = -1;
module_param(pid, int, S_IRUGO);
static int killd_init(void)
{
    struct task_struct * p;
    printk(KERN_ALERT "killd: force D status process to death\n");
    printk(KERN_ALERT "killd: pid=%d\n", pid);
    //read_lock(&tasklist_lock);
    for_each_process(p){
        if(p->pid == pid){
            printk("killd: found\n");
            set_task_state(p, TASK_STOPPED);
            printk(KERN_ALERT "killd: aha, dead already\n");
            return 0;
        }
    }
    printk("not found");
    //read_unlock(&tasklist_lock);
    return 0;
}
static void killd_exit(void)
{
    printk(KERN_ALERT "killd: bye\n");
}
module_init(killd_init);
module_exit(killd_exit);
-----Makefile------------
obj-m := killd.o
編譯模塊
make -C yourkerneltree M=`pwd` modules
插入模塊的時(shí)候提供D狀態(tài)的進(jìn)程號(hào),就可以將其轉(zhuǎn)換為stopped狀態(tài),使用普通kill就可以殺死。
./insmod ./killd.ko pid=1234


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/79668/showart_2128800.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP