<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-204  評論-149  文章-0  trackbacks-0

    Linux下進程的各種狀態

    我的問題來了,假如是一個進程使用了udp的阻塞recvfrom()方法,在網絡連接沒有數據到達時,進程會在這個方法上面阻塞?這個阻塞的意思是進程會進入等待隊列,此時的進程處于下列的什么狀態??然后cpu進而調度其他進程。。。還是cpu仍然給此進程分配時間片在它自己的時間片上讓其阻塞在此方法上,這不是浪費cpu時間??
    我是真的得好好看看操作系統的書了

    D Uninterruptible sleep (usually IO)
    不可中斷的深度睡眠,一般由IO引起,同步IO在做讀或寫操作時,此進程不能做其它事情,只能等待,這時進程處于這種狀態,如果程序采用異步IO,這種狀態應該就很少見到了
     
    R Running or runnable (on run queue) 
    進程處于運行或就緒狀態
     
    S Interruptible sleep (waiting for an event to complete)
    可接收信號的睡眠狀態,sleep函數可演示這種狀態
     
    T Stopped, either by a job control signal or because it is being traced.
    被ctrl+z中斷或被trace
     
    W paging (not valid since the 2.6.xx kernel)
     
    X dead (should never be seen)
    進程已經完全死掉,不可能看見這種狀態的
     
    Z Defunct ("zombie") process, terminated but not reaped by its parent.
    進程已經終止,但是其父進程沒有來及處理它,多進程寫不好的話,這種狀態是常見的
     
    For BSD formats and when the stat keyword is used, additional characters may
    be displayed:
    < high-priority (not nice to other users)
     
    N low-priority (nice to other users)
     
    L has pages locked into memory (for real-time and custom IO)
     
    s is a session leader
     
    l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
     
    + is in the foreground process group
     
    關于D和Z一段有趣的解釋:
     
        有一類垃圾卻并非這么容易打掃,那就是我們常見的狀態為 D (Uninterruptible sleep) ,以及狀態為 Z (Zombie) 的垃圾進程。這些垃圾進程要么是求而不得,像怨婦一般等待資源(D),要么是僵而不死,像冤魂一樣等待超度(Z),它們在 CPU run_queue 里滯留不去,把 Load Average 弄的老高老高,沒看過我前一篇blog的國際友人還以為這兒民怨沸騰又出了什么大事呢。怎么辦?開槍!kill -9!看你們走是不走。但這兩種垃圾進程偏偏是刀槍不入的,不管換哪種槍法都殺不掉它們。無奈,只好reboot,像剿滅禽流感那樣不分青紅皂白地一律撲殺!
     
        怨婦 D,往往是由于 I/O 資源得不到滿足,而引發等待,在內核源碼 fs/proc/array.c 里,其文字定義為“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打頭字母),對應著 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。舉個例子,當 NFS 服務端關閉之時,若未事先 umount 相關目錄,在 NFS 客戶端執行 df 就會掛住整個登錄會話,按 Ctrl+C 、Ctrl+Z 都無濟于事。斷開連接再登錄,執行 ps axf 則看到剛才的 df 進程狀態位已變成了 D ,kill -9 無法殺滅。正確的處理方式,是馬上恢復 NFS 服務端,再度提供服務,剛才掛起的 df 進程發現了其苦苦等待的資源,便完成任務,自動消亡。若 NFS 服務端無法恢復服務,在 reboot 之前也應將 /etc/mtab 里的相關 NFS mount 項刪除,以免 reboot 過程例行調用 netfs stop 時再次發生等待資源,導致系統重啟過程掛起。

      冤魂 Z 之所以殺不死,是因為它已經死了,否則怎么叫 Zombie(僵尸)呢?冤魂不散,自然是生前有結未解之故。在UNIX/Linux中,每個進程都有一個父進程,進程號叫PID(Process ID),相應地,父進程號就叫PPID(Parent PID)。當進程死亡時,它會自動關閉已打開的文件,舍棄已占用的內存、交換空間等等系統資源,然后向其父進程返回一個退出狀態值,報告死訊。如果程序有 bug,就會在這最后一步出問題。兒子說我死了,老子卻沒聽見,沒有及時收棺入殮,兒子便成了僵尸。在UNIX/Linux中消滅僵尸的手段比較殘忍,執行 ps axjf 找出僵尸進程的父進程號(PPID,第一列),先殺其父,然后再由進程天子 init(其PID為1,PPID為0)來一起收拾父子僵尸,超度亡魂,往生極樂。注意,子進程變成僵尸只是礙眼而已,并不礙事,如果僵尸的父進程當前有要務在身,則千萬不可貿然殺之。

    posted on 2009-07-05 00:21 Frank_Fang 閱讀(5129) 評論(1)  編輯  收藏 所屬分類: Linux | ACE網絡編程

    評論:
    # re: Linux下進程的各種狀態 2009-07-05 00:46 | Frank_Fang
    linux進程狀態D和Z的處理

    長期生活在 Linux 環境里,漸漸地就有一種環保意識油然而生。比如,我們會在登錄提示里寫上“悟空,我跟你說過叫你不要亂扔東西,亂扔東西是不對的。哎呀我話沒說完你怎么把棍子扔掉了?月光寶盒是寶物,亂扔它會污染環境,要是砸到小朋友怎么辦?就算砸不到小朋友,砸到了花花草草也不好嘛...”;在用戶缺省目錄里放一個題為 “自覺保護環境 請勿堆放垃圾”的空文件,并用 chattr +i 設為不可修改;看到垃圾文件就立即掃入 /tmp 目錄,然后發廣播通知垃圾制造者自己去 /tmp 認領,且警告其下不為例...我們深知,系統環境的整潔有利于系統管理員保持良好的心情、清晰的思路和穩定的工作狀態。

      有一類垃圾卻并非這么容易打掃,那就是我們常見的狀態為 D (Uninterruptible sleep) ,以及狀態為 Z (Zombie) 的垃圾進程。這些垃圾進程要么是求而不得,像怨婦一般等待資源(D),要么是僵而不死,像冤魂一樣等待超度(Z),它們在 CPU run_queue 里滯留不去,把 Load Average 弄的老高老高,沒看過我前一篇blog的國際友人還以為這兒民怨沸騰又出了什么大事呢。怎么辦?開槍!kill -9!看你們走是不走。但這兩種垃圾進程偏偏是刀槍不入的,不管換哪種槍法都殺不掉它們。無奈,只好reboot,像剿滅禽流感那樣不分青紅皂白地一律撲殺!

      悟空,我們所運維的可是24*7全天候對外部客戶服務的系統,怎么能動不動就 reboot ?我們的考核指標可是4個9(99.99%,全年計劃外當機時間不得超過52分鐘34秒),又不是4個8,你稍微遇到點事就reboot,還要不要可用性了?再說,現在社會都開始奔和諧去了,我們對于 D 和 Z 這兩種垃圾進程,也該盡可能采取慈悲手段,能解決其困難的,就創造條件,解決其實際困難,能消除其冤結的,就誦經燒紙,消除其前世冤結,具體問題應具體分析具體解決,濫殺無辜只會導致冤冤相報因果循環...$^#$%#%^@#

      貧僧還是回來說正題。怨婦 D,往往是由于 I/O 資源得不到滿足,而引發等待,在內核源碼 fs/proc/array.c 里,其文字定義為“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打頭字母),對應著 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。舉個例子,當 NFS 服務端關閉之時,若未事先 umount 相關目錄,在 NFS 客戶端執行 df 就會掛住整個登錄會話,按 Ctrl+C 、Ctrl+Z 都無濟于事。斷開連接再登錄,執行 ps axf 則看到剛才的 df 進程狀態位已變成了 D ,kill -9 無法殺滅。正確的處理方式,是馬上恢復 NFS 服務端,再度提供服務,剛才掛起的 df 進程發現了其苦苦等待的資源,便完成任務,自動消亡。若 NFS 服務端無法恢復服務,在 reboot 之前也應將 /etc/mtab 里的相關 NFS mount 項刪除,以免 reboot 過程例行調用 netfs stop 時再次發生等待資源,導致系統重啟過程掛起。

      冤魂 Z 之所以殺不死,是因為它已經死了,否則怎么叫 Zombie(僵尸)呢?冤魂不散,自然是生前有結未解之故。在UNIX/Linux中,每個進程都有一個父進程,進程號叫PID(Process ID),相應地,父進程號就叫PPID(Parent PID)。當進程死亡時,它會自動關閉已打開的文件,舍棄已占用的內存、交換空間等等系統資源,然后向其父進程返回一個退出狀態值,報告死訊。如果程序有 bug,就會在這最后一步出問題。兒子說我死了,老子卻沒聽見,沒有及時收棺入殮,兒子便成了僵尸。在UNIX/Linux中消滅僵尸的手段比較殘忍,執行 ps axjf 找出僵尸進程的父進程號(PPID,第一列),先殺其父,然后再由進程天子 init(其PID為1,PPID為0)來一起收拾父子僵尸,超度亡魂,往生極樂。注意,子進程變成僵尸只是礙眼而已,并不礙事,如果僵尸的父進程當前有要務在身,則千萬不可貿然殺之。

    關于ZOMBIE進程:

    這些進程已經死亡,但沒有釋放系統資源,包括內存和一些一些系統表等,如果這樣的進程很多,會引發系統問題。用ps -el看出的進程狀態如果是Z,就是僵尸進程。
    ps -ef|grep defunc可以找出僵尸進程.
    有些ZOMBIE進程時用kill -9也不能殺死,而且消耗了很多系統資源不能釋放,如果系統在shutdown時發出信息:some process wouldn’t die. 這就意味這有些進程不能被reboot發出的kill –9殺掉,這些很可能就是僵尸進程。

    可以用ps 的 – l 選項,得到更詳細的進程信息.
    F(Flag):一系列數字的和,表示進程的當前狀態。這些數字的含義為:
    00:若單獨顯示,表示此進程已被終止。
    01:進程是核心進程的一部分,常駐于系統主存。如:    sched、 vhand 、bdflush 等。
    02:Parent is tracing process.
    04 :Tracing parent's signal has stopped the process; the parent is waiting ( ptrace(S)).
    10:進程在優先級低于或等于25時,進入休眠狀態,而且不能用信號喚醒,例如在等待一個inode被創建時   
    20:進程被裝入主存(primary memory)
    40:進程被鎖在主存,在事務完成前不能被置換   e
    S(state of? the process )
    O:進程正在處理器運行 
    S:休眠狀態(sleeping)
    R:等待運行(runable)   
    I:空閑狀態(idle)
    Z:僵尸狀態(zombie)   
    T:跟蹤狀態(Traced)
    B:進程正在等待更多的內存頁
    C(cpu usage):cpu利用率的估算值

    清除ZOMBIE(僵尸)進程可以使用如下方法:
    1> kill –18 PPID (PPID是其父進程)
    這個信號是告訴父進程,該子進程已經死亡了,請收回分配給他的資源。
    2>如果不行則看能否終止其父進程(如果其父進程不需要的話)。先看其父進程又無其他子進程,如果有,可能需要先kill其他子進程,也就是兄弟進程。方法是:
    kill –15 PID1 PID2(PID1,PID2是僵尸進程的父進程的其它子進程)。
    然后再kill父進程:kill –15 PPID

    這樣僵尸進程就可能被完全殺掉了。

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/eroswang/archive/2007/09/06/1774298.aspx




      回復  更多評論
      
    主站蜘蛛池模板: 国产h肉在线视频免费观看| 免费人成大片在线观看播放| 51精品视频免费国产专区| 国产成人高清亚洲| 人妖系列免费网站观看| 亚洲AV无码成H人在线观看| 久久久久亚洲AV无码去区首| 中文在线免费视频| 精品亚洲成α人无码成α在线观看 | 美女被免费网站91色| 免费va在线观看| 羞羞视频免费网站在线看| 亚洲人成网77777亚洲色 | 亚洲AV无码专区在线厂| 波多野结衣一区二区免费视频| 亚洲爆乳成av人在线视菜奈实 | 中文字幕av免费专区| 亚洲午夜久久久影院伊人| 国产一区二区三区免费| 国产免费资源高清小视频在线观看| 亚洲色www永久网站| 免费一级e一片在线播放| xvideos永久免费入口| 日本亚洲国产一区二区三区| 在线成人精品国产区免费| 666精品国产精品亚洲| 全黄A免费一级毛片| 区久久AAA片69亚洲| 亚洲国产精品免费视频| 亚洲精品在线播放| 日韩午夜免费视频| 在线看片免费人成视频久网下载| 亚洲A∨无码无在线观看| av无码久久久久不卡免费网站| 激情婷婷成人亚洲综合| 亚洲AV无码成人精品区蜜桃| 免费毛片在线看片免费丝瓜视频| 日本一区二区三区免费高清在线 | 成人特黄a级毛片免费视频| 杨幂最新免费特级毛片| 亚洲av女电影网|