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

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视频国产精品免费观看| 国产拍揄自揄精品视频麻豆| 国模一区二区三区| 亚洲综合第一| 一本大道久久a久久精二百| 欧美日韩精品一区二区天天拍小说| 亚洲电影专区| 亚洲乱码视频| 国产精品乱码久久久久久| 欧美一区二区三区电影在线观看| 午夜精品久久久久影视| 精品二区视频| 欧美黄色精品| 国产精品一区二区三区成人| 久久久夜夜夜| 欧美日韩a区| 久久成人一区| 欧美激情一区二区三区成人| 亚洲欧美另类综合偷拍| 久久久久免费视频| 日韩西西人体444www| 亚洲欧美一区二区在线观看| 在线播放亚洲一区| 在线亚洲免费视频| 精品电影一区| 午夜国产精品视频免费体验区| 精品99一区二区| 亚洲系列中文字幕| 亚洲韩国日本中文字幕| 午夜精品久久| 亚洲午夜精品一区二区三区他趣 | 亚洲黄色成人网| 国产精品视频1区| 亚洲国产欧美不卡在线观看| 国产日韩欧美电影在线观看| 亚洲人成精品久久久久| 在线观看国产日韩| 亚洲欧美一区二区三区极速播放| 欧美本精品男人aⅴ天堂| 亚洲在线观看视频| 亚洲精品欧美| 久久久夜精品| 亚洲欧美日韩国产综合在线| 欧美激情一二区| 免费不卡亚洲欧美| 国产一区二区成人久久免费影院| 亚洲乱码国产乱码精品精天堂| 亚洲国产精品女人久久久| 欧美中文字幕第一页| 午夜精品国产| 国产精品夫妻自拍| 亚洲精品在线视频观看| 亚洲激情视频在线播放| 久久一区二区三区超碰国产精品| 久久久蜜桃精品| 国产亚洲欧美aaaa| 欧美一区二区免费观在线| 午夜在线视频观看日韩17c| 欧美日韩综合一区| 亚洲精品日韩在线观看| 99国内精品| 欧美日韩1区2区| 99国产精品久久久久久久久久| 一本色道久久99精品综合| 欧美精品二区三区四区免费看视频| 欧美高清视频www夜色资源网| 极品尤物av久久免费看 | 欧美sm极限捆绑bd| 91久久在线视频| 欧美jizz19hd性欧美| 亚洲经典在线| 亚洲一区二区免费在线| 国产精品久久久久久久久久久久久久 | 亚洲一区二区三区国产| 午夜精品美女自拍福到在线| 国产精品视频1区| 久久都是精品| 欧美高清日韩| 亚洲影音一区| 国产日本欧美一区二区三区| 久久久久久久91| 亚洲全黄一级网站| 新片速递亚洲合集欧美合集| 国产亚洲视频在线观看| 久久网站免费| 亚洲伦理中文字幕| 欧美一区日本一区韩国一区| 一区二区三区在线看| 欧美激情欧美激情在线五月| 99国内精品久久| 久久精品91| av成人免费在线| 国产九区一区在线| 免费在线观看精品| 亚洲欧美激情视频| 欧美激情精品久久久久久大尺度| 中文无字幕一区二区三区| 国产一区二区三区在线观看网站| 老鸭窝毛片一区二区三区| 一区二区三区四区精品| 免费欧美电影| 在线视频中文亚洲| 亚洲综合激情| 午夜一区不卡| 亚洲永久免费| 欧美国产一区二区| 亚洲欧美怡红院| 亚洲精品你懂的| 国产一区自拍视频| 欧美日韩在线播放一区| 久久精品一二三| 亚洲免费影视| 亚洲美女区一区| 免费在线欧美视频| 欧美一区二区三区在线看| 日韩一级黄色片| 在线观看中文字幕亚洲| 国产欧美精品一区aⅴ影院| 模特精品在线| 久久激情综合网| 亚洲欧美日本日韩| 一本到高清视频免费精品| 欧美国产日韩a欧美在线观看| 久久国产精品久久国产精品| 在线视频一区观看| 99国产精品自拍| 亚洲日本成人网| 精品1区2区3区4区| 国语自产在线不卡| 国产女人精品视频| 国产精品一区免费观看| 国产精品毛片一区二区三区 | 久久精品视频播放| 午夜久久资源| 午夜伦欧美伦电影理论片| 亚洲少妇最新在线视频| 一区电影在线观看| 一区二区三区免费看| 日韩视频在线免费| 亚洲精品一区二区三区四区高清| 亚洲国产一区二区三区青草影视 | 亚洲视频大全| 亚洲一区欧美| 欧美一区二区播放| 久久精品国产亚洲精品| 久久视频免费观看| 久久久噜噜噜久久狠狠50岁| 久久综合九色综合欧美就去吻 | 亚洲日本中文字幕| 一区二区91| 性欧美video另类hd性玩具| 午夜精品久久一牛影视| 久久久伊人欧美| 欧美成人免费全部| 欧美日韩亚洲一区二区三区在线观看| 欧美日韩国产成人在线免费| 欧美视频官网| 国产午夜亚洲精品不卡| 黑人巨大精品欧美一区二区| 亚洲福利视频一区| 亚洲少妇自拍| 欧美在线视屏| 欧美福利一区二区三区| 99精品国产热久久91蜜凸| 亚洲永久视频| 欧美成人日本| 国产精品视频一区二区三区| 黄色精品一二区| 中文在线资源观看网站视频免费不卡 | 老巨人导航500精品| 亚洲国产精品va| 一区二区三区高清不卡| 欧美在线免费| 欧美精品 日韩| 国产日韩欧美日韩大片| 亚洲国产91色在线| 亚洲先锋成人| 欧美插天视频在线播放| 中文国产亚洲喷潮| 久久综合精品国产一区二区三区| 欧美日韩国产成人精品| 精品成人一区二区三区四区| 亚洲一级高清| 欧美高清视频一二三区| 亚洲欧美日韩国产中文在线| 欧美.com| 国产在线观看一区| 亚洲婷婷综合色高清在线| 免费观看久久久4p| 亚洲尤物视频网| 欧美日韩精品在线观看| 在线看片日韩| 欧美一区二区| 中文成人激情娱乐网| 欧美精品一区在线发布| 亚洲国产精品成人精品| 久久久久九九九九| 性欧美xxxx视频在线观看| 国产精品久久国产愉拍 |