青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
在fork()/execve()過程中,假設(shè)子進程結(jié)束時父進程仍存在,而父進程fork()之前既沒安裝SIGCHLD信號處理函數(shù)調(diào)用 waitpid()等待子進程結(jié)束,又沒有顯式忽略該信號,則子進程成為僵尸進程,無法正常結(jié)束,此時即使是root身份kill-9也不能殺死僵尸進 程。補救辦法是殺死僵尸進程的父進程(僵尸進程的父進程必然存在),僵尸進程成為"孤兒進程",過繼給1號進程init,init始終會負(fù)責(zé)清理僵尸進 程。

  僵尸進程是指的父進程已經(jīng)退出,而該進程dead之后沒有進程接受,就成為僵尸進程.(zombie)進程

  怎樣產(chǎn)生僵尸進程的:

  一個進程在調(diào)用exit命令結(jié)束自己的生命的時候,其實它并沒有真正的被銷毀,而是留下一個稱為僵尸進程(Zombie)的數(shù)據(jù)結(jié)構(gòu)(系統(tǒng)調(diào)用 exit,它的作用是使進程退出,但也僅僅限于將一個正常的進程變成一個僵尸進程,并不能將其完全銷毀)。在Linux進程的狀態(tài)中,僵尸進程是非常特殊的一種,它已經(jīng)放棄了幾乎所有內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態(tài)等信息供其他進程收集,除此之外,僵尸進程不再占有任何內(nèi)存空間。它需要它的父進程來為它收尸,如果他的父進程沒安裝SIGCHLD信號處理函數(shù)調(diào)用wait或waitpid()等待子進程結(jié)束,又沒有顯式忽略該信號,那么它就一直保持僵尸狀態(tài),如果這時父進程結(jié)束了,那么init進程自動會接手這個子進程,為它收尸,它還是能被清除的。但是如果如果父進程是一個循環(huán),不會結(jié)束,那么子進程就會一直保持僵尸狀態(tài),這就是為什么系統(tǒng)中有時會有很多的僵尸進程。

  Linux系統(tǒng)對運行的進程數(shù)量有限制,如果產(chǎn)生過多的僵尸進程占用了可用的進程號,將會導(dǎo)致新的進程無法生成。這就是僵尸進程對系統(tǒng)的最大危害。

  僵尸進程實例:

  /*-----zombie1.c-----*/

  #include "sys/types.h"

  #include "sys/wait.h"

  #include "stdio.h"

  #include "unistd.h"

  int main(int argc, char* argv[])

  {

          while(1)

          {

                 pid_t chi = fork();

                  if(chi == 0)

                  {

                          execl("/bin/bash","bash","-c","ls",NULL);

                  }

                  sleep(2);

  }

  會不停地產(chǎn)生僵死進程ls;

  /*-----zombie2.c-----*/

  #include <stdio.h>

  #include<sys/types.h>

  main()

  {

          if(!fork())

          {

                  printf("child pid=%d\n", getpid());

                  exit(0);

          }

          /*wait();*/

          /*waitpid(-1,NULL,0);*/

          sleep(60);

          printf("parent pid=%d \n", getpid());

          exit(0);

  }

  60s內(nèi)會不斷產(chǎn)生僵尸進程,直到父進程exit(0);

  如果在調(diào)用wait/waitpid來為子進程收尸,就不會產(chǎn)生僵尸進程了。

  PS:運行例子,先gcc zombie1.c -o zombie編譯,然后運行zombie;

  然后可以可用ps -ef來查看是否產(chǎn)生了僵尸進程。

  怎么查看僵尸進程:

  利用命令ps,可以看到有標(biāo)記為Z的進程就是僵尸進程。

  怎樣來清除僵尸進程:

  1.改寫父進程,在子進程死后要為它收尸。具體做法是接管SIGCHLD信號。子進程死后,會發(fā)送SIGCHLD信號給父進程,父進程收到此信 號后,執(zhí)行 waitpid()函數(shù)為子進程收尸。這是基于這樣的原理:就算父進程沒有調(diào)用wait,內(nèi)核也會向它發(fā)送SIGCHLD消息,盡管對的默認(rèn)處理是忽略, 如果想響應(yīng)這個消息,可以設(shè)置一個處理函數(shù)。

2.把父進程殺掉。父進程死后,僵尸進程成為"孤兒進程",過繼給1號進程init,init始終會負(fù)責(zé)清理僵尸進程.它產(chǎn)生的所有僵尸進程也跟著消失
在Linux中可以用

  ps auwx

  發(fā)現(xiàn)僵尸進程

  a all w/ tty, including other users 所有窗口和終端,包括其他用戶的進程

  u user-oriented 面向用戶(用戶友好)

  -w,w wide output 寬格式輸出

  x processes w/o controlling ttys

  在僵尸進程后面 會標(biāo)注

  ps axf

  看進程樹,以樹形方式現(xiàn)實進程列表

  ps axm

  會把線程列出來,在linux下進程和線程是統(tǒng)一的,是輕量級進程的兩種方式。

  ps axu

  顯示進程的詳細(xì)狀態(tài)

  killall

  kill -15

  kill -9

  一般都不能殺掉 defunct進程

  用了kill -15,kill -9以后 之后反而會多出更多的僵尸進程

  kill -kill pid

  fuser -k pid

  可以考慮殺死他的parent process,

  kill -9 他的parent process

  =========================================== 一個已經(jīng)終止,但是其父進程尚未對其進行善后處理(獲取終止子進程的有關(guān)信息、釋放它仍占用的資源)的進程被稱為僵死進程(Zombie Process)。

  避免zombie的方法:

  1)在SVR4中,如果調(diào)用signal或sigset將SIGCHLD的配置設(shè)置為忽略,則不會產(chǎn)生僵死子進程。另外,使用SVR4版的 sigaction,則可設(shè)置SA_NOCLDWAIT標(biāo)志以避免子進程僵死。

  Linux中也可使用這個,在一個程序的開始調(diào)用這個函數(shù)

  signal(SIGCHLD,SIG_IGN);

  2)調(diào)用fork兩次。程序8 - 5 實現(xiàn)了這一點。

  3)用waitpid等待子進程返回.

  ===========================================

  zombie進程是僵死進程。防止它的辦法,一是用wait,waitpid之類的函數(shù)獲得進程的終止?fàn)顟B(tài),以釋放資源。另一個是fork兩次

  ===========================================

  defunct進程只是在process table里還有一個記錄,其他的資源沒有占用,除非你的系統(tǒng)的process個數(shù)的限制已經(jīng)快超過了,zombie進程不會有更多的壞處。

  可能唯一的方法就是reboot系統(tǒng)可以消除zombie進程。

  ===========================================

  任何程序都有僵尸狀態(tài),它占用一點內(nèi)存資源(也就是進程表里還有一個記錄),僅僅是表象而已不必害怕。如果程序有問題有機會遇見,解決大批量僵尸簡單有效的辦法是重起。kill是無任何效果的

  fork與zombie/defunct"

  在Unix下的一些進程的運作方式。當(dāng)一個進程死亡時,它并不是完全的消失了。進程終止,它不再運行,但是還有一些殘留的小東西等待父進程收 回。這些殘留的東西包括子進程的返回值和其他的一些東西。當(dāng)父進程 fork()一個子進程后,它必須用 wait() 或者 waitpid() 等待子進程退出。正是這個 wait() 動作來讓子進程的殘留物消失。

  自然的,在上述規(guī)則之外有個例外:父進程可以忽略 SIGCLD 軟中斷而不必要 wait()。可以這樣做到(在支持它的系統(tǒng)上,比如Linux):

  main()

  {

  signal(SIGCLD, SIG_IGN); /* now I don't have to wait()! */

fork();

  fork();

  fork(); /* Rabbits, rabbits, rabbits! */

  }

  現(xiàn)在,子進程死亡時父進程沒有 wait(),通常用 ps 可以看到它被顯示為“”。它將永遠保持這樣 直到 父進程 wait(),或者按以下方法處理。

  這里是你必須知道的另一個規(guī)則:當(dāng)父進程在它wait()子進程之前死亡了(假定它沒有忽略 SIGCLD),子進程將把 init(pid1)進程作為它的父進程。如果子進程工作得很好并能夠控制,這并不是問題。但如果子進程已經(jīng)是defunct,我們就有了一點小麻煩。 看,原先的父進程不可能再 wait(),因為它已經(jīng)消亡了。這樣,init 怎么知道 wait() 這些zombie 進程。

  答案:不可預(yù)料的。在一些系統(tǒng)上,init周期性的破壞掉它所有的defunct進程。在另外一些系統(tǒng)中,它干脆拒絕成為任何defunct進 程的父進程,而是馬上毀滅它們。如果你使用上述系統(tǒng)的一種,可以寫一個簡單的循環(huán),用屬于init的defunct進程填滿進程表。這大概不會令你的系統(tǒng) 管理員很高興吧?

  你的任務(wù):確定你的父進程不要忽略 SIGCLD,也不要 wait() 它 fork() 的所有進程。不過,你也未必 要總是這樣做(比如,你要起一個 daemon 或是別的什么東西),但是你必須小心編程,如果你是一個 fork()的新手。另外,也不要在心理上有任何束縛。

  總結(jié):

  子進程成為 defunct 直到父進程 wait(),除非父進程忽略了 SIGCLD 。

  更進一步,父進程沒有 wait() 就消亡(仍假設(shè)父進程沒有忽略 SIGCLD )的子進程(活動的或者 defunct)成為 init 的子進程,init 用重手法處理它們。


from:

http://linux.chinaitlab.com/administer/818916.html


posted on 2010-08-26 17:09 chatler 閱讀(673) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜在线观看欧美| 99精品国产在热久久婷婷| 久久久久se| 欧美一区精品| 欧美亚洲专区| 亚洲靠逼com| 有码中文亚洲精品| 国产一区二区三区久久精品| 国产在线观看一区| 曰本成人黄色| 一区二区三区四区五区精品| 亚洲欧美国产高清| 久久久综合免费视频| 久久综合网hezyo| 亚洲精品国久久99热| 欧美日韩国产首页| 欧美日韩国产影院| 国产日本欧美视频| 亚洲精品欧洲精品| 欧美在线观看网站| 91久久久久久国产精品| 亚洲在线一区二区| 久久激情婷婷| 欧美日韩国产成人在线91| 国产欧美丝祙| 亚洲免费高清| 久久漫画官网| 一本色道久久综合亚洲精品小说| 欧美一区二区视频97| 欧美欧美天天天天操| 国外成人网址| 亚洲一区二区三区精品视频| 老牛嫩草一区二区三区日本| 中文国产亚洲喷潮| 欧美福利一区| 激情文学综合丁香| 欧美制服丝袜第一页| 亚洲肉体裸体xxxx137| 久久嫩草精品久久久精品一| 国产精品久久久久三级| 91久久夜色精品国产网站| 久久国产福利| 亚洲欧美国产毛片在线| 欧美日韩国产999| 亚洲精品日产精品乱码不卡| 快she精品国产999| 欧美亚洲一级| 国产精品一区在线播放| 中文欧美日韩| 亚洲精品国产精品乱码不99按摩 | 午夜视频久久久久久| 欧美日本在线| 亚洲九九精品| 亚洲第一在线综合网站| 噜噜爱69成人精品| 亚洲第一天堂av| 噜噜噜噜噜久久久久久91| 欧美在线免费观看视频| 国产亚洲激情在线| 久久久久久久久久久久久女国产乱| 雨宫琴音一区二区在线| 久久精品日韩一区二区三区| 欧美成人精品福利| 国产一区二区三区精品久久久| 亚洲精品视频一区| 亚洲免费电影在线观看| 久久资源在线| 亚洲国产天堂久久国产91| 欧美成人首页| 嫩模写真一区二区三区三州| 亚洲东热激情| 亚洲欧洲日韩在线| 欧美日本久久| 亚洲欧美变态国产另类| 午夜精品久久| 亚洲第一在线| 亚洲乱码国产乱码精品精可以看| 欧美日韩国产美| 午夜视频一区在线观看| 欧美中文字幕视频在线观看| 在线观看亚洲精品视频| 亚洲激情av在线| 国产精品日韩欧美一区二区三区| 性视频1819p久久| 久久久久www| 99视频热这里只有精品免费| 一区二区三区视频在线| 国产一区二区在线免费观看 | 亚洲欧美日本精品| 一区在线观看| 一本久道久久综合狠狠爱| 国产欧美视频一区二区| 欧美激情一区二区三区在线| 欧美日韩国产综合视频在线| 久久本道综合色狠狠五月| 欧美ed2k| 久久精品国产77777蜜臀 | 久久免费高清视频| 一区二区三区免费在线观看| 欧美一级淫片播放口| aⅴ色国产欧美| 久久精品国内一区二区三区| 亚洲一区二区免费| 久久美女性网| 欧美伊人久久| 欧美日韩在线精品| 欧美阿v一级看视频| 国产精品免费在线| 亚洲国产精品999| 国产一区二区三区在线观看网站| 亚洲精品免费一二三区| 99视频精品在线| 国语自产精品视频在线看8查询8| 最新国产乱人伦偷精品免费网站 | 欧美顶级艳妇交换群宴| 国产欧美精品久久| 中文在线一区| 亚洲人在线视频| 久久福利影视| 久久国产欧美| 国产精品一区二区你懂的| 亚洲看片网站| 亚洲国产综合视频在线观看| 久久不射网站| 久久精品网址| 国产性天天综合网| 亚洲综合导航| 香蕉乱码成人久久天堂爱免费| 欧美日韩不卡| 日韩视频久久| 亚洲在线观看| 国产精品区一区二区三| 亚洲午夜久久久久久久久电影院| 亚洲视频中文字幕| 国产精品白丝av嫩草影院| 99亚洲精品| 亚洲午夜电影网| 国产精品蜜臀在线观看| 亚洲一级电影| 久久婷婷av| 亚洲激情图片小说视频| 欧美华人在线视频| 99www免费人成精品| 午夜精品久久久久久久蜜桃app| 国产精品久久久久久久久免费| 亚洲一区激情| 老司机成人网| 日韩一区二区久久| 国产精品a久久久久| 亚洲一区在线直播| 久久一区二区三区四区五区| 1769国内精品视频在线播放| 欧美高清视频一二三区| 日韩亚洲一区二区| 久久精品国产亚洲aⅴ| 红桃视频欧美| 欧美精品一区二区三区在线看午夜| 亚洲美女在线一区| 欧美中文字幕| 亚洲激情成人网| 欧美四级伦理在线| 欧美一区二区精美| 亚洲第一天堂av| 欧美一级久久| 亚洲三级影院| 国产日韩欧美中文| 欧美jizz19性欧美| 亚洲主播在线| 欧美激情在线免费观看| 亚洲欧美大片| 亚洲人永久免费| 国产日韩欧美在线观看| 欧美大胆a视频| 欧美一区二区三区男人的天堂| 欧美激情亚洲激情| 欧美一区二区免费| 日韩午夜电影| 狠狠色狠狠色综合| 国产精品www.| 欧美成人免费视频| 新片速递亚洲合集欧美合集| 在线免费观看一区二区三区| 欧美大片免费观看在线观看网站推荐| 一本色道久久综合狠狠躁的推荐| 久久av资源网站| 国产精品99久久久久久www| 激情五月***国产精品| 国产精品成人观看视频免费| 久久综合免费视频影院| 午夜精品福利一区二区蜜股av| 亚洲精品1区2区| 免费在线亚洲| 久久免费一区| 欧美一区二区精品| 亚洲一区激情| 洋洋av久久久久久久一区| 亚洲国产日韩欧美在线图片| 国产欧美视频一区二区三区| 欧美色大人视频| 欧美日韩精品在线|