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

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

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

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

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

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

  僵尸進(jìn)程實例:

  /*-----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)生僵死進(jì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)生僵尸進(jìn)程,直到父進(jìn)程exit(0);

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

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

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

  怎么查看僵尸進(jìn)程:

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

  怎樣來清除僵尸進(jìn)程:

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

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

  ps auwx

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

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

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

  -w,w wide output 寬格式輸出

  x processes w/o controlling ttys

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

  ps axf

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

  ps axm

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

  ps axu

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

  killall

  kill -15

  kill -9

  一般都不能殺掉 defunct進(jìn)程

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

  kill -kill pid

  fuser -k pid

  可以考慮殺死他的parent process,

  kill -9 他的parent process

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

  避免zombie的方法:

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

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

  signal(SIGCHLD,SIG_IGN);

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

  3)用waitpid等待子進(jìn)程返回.

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

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

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

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

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

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

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

  fork與zombie/defunct"

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

  自然的,在上述規(guī)則之外有個例外:父進(jìn)程可以忽略 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)在,子進(jìn)程死亡時父進(jìn)程沒有 wait(),通常用 ps 可以看到它被顯示為“”。它將永遠(yuǎn)保持這樣 直到 父進(jìn)程 wait(),或者按以下方法處理。

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

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

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

  總結(jié):

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

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


from:

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


posted on 2010-08-26 17:09 chatler 閱讀(673) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(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>
            久久夜色精品国产噜噜av| 亚洲已满18点击进入久久| 亚洲欧美日本另类| 99v久久综合狠狠综合久久| 欧美日韩国产综合在线| 亚洲伊人久久综合| 性xx色xx综合久久久xx| 狠狠色丁香久久婷婷综合_中| 欧美在线国产| 久久久久久久久蜜桃| 最新成人在线| 亚洲图片欧洲图片av| 狠狠色丁香久久婷婷综合_中| 亚洲成色精品| 亚洲性夜色噜噜噜7777| 国产精品视频在线观看| 久久久精品动漫| 久久免费国产精品1| 在线中文字幕日韩| 午夜亚洲视频| 一本大道久久a久久综合婷婷 | 欧美午夜精彩| 香蕉久久a毛片| 久久天堂成人| 亚洲欧美日韩国产精品 | 亚洲第一视频| 国产精品一区二区久久久久| 久热精品视频在线观看一区| 欧美日韩美女在线观看| 久久婷婷国产综合国色天香| 欧美日韩一级黄| 久久综合精品一区| 国产精品日韩欧美一区二区三区| 欧美激情aⅴ一区二区三区| 国产精品视频xxxx| 亚洲黄色影片| 精品成人一区二区三区| 亚洲欧美乱综合| 99国内精品| 免费黄网站欧美| 久久黄色级2电影| 欧美日韩精品免费观看视一区二区| 久久久www成人免费毛片麻豆| 欧美色欧美亚洲高清在线视频| 欧美 日韩 国产 一区| 国产精品一区二区三区观看| 亚洲人精品午夜在线观看| 在线日韩一区二区| 欧美电影在线| 国模精品一区二区三区色天香| 一二三四社区欧美黄| 亚洲日本无吗高清不卡| 久久久久99| 久久久精品性| 国产亚洲欧洲997久久综合| 亚洲视频在线一区观看| 这里只有视频精品| 欧美三级在线播放| 亚洲美女啪啪| 一区二区不卡在线视频 午夜欧美不卡在 | 久久丁香综合五月国产三级网站| 欧美视频官网| 一本到高清视频免费精品| 日韩午夜在线视频| 欧美激情第10页| 欧美好骚综合网| 亚洲国产黄色片| 蜜桃av噜噜一区| 亚洲成色精品| 一区二区激情视频| 欧美日韩另类在线| 日韩午夜电影av| 亚洲一级免费视频| 国产精品欧美日韩| 午夜精品久久久久久久白皮肤| 欧美一区三区三区高中清蜜桃 | 亚洲欧美日韩在线观看a三区 | 老司机精品视频网站| 伊人成人在线视频| 免费视频亚洲| aa级大片欧美| 欧美一区二区三区播放老司机| 国外成人性视频| 老司机精品久久| 亚洲欧美网站| 国产一区二区三区四区五区美女| 久久精品国产清高在天天线| 欧美成人午夜激情在线| 亚洲免费观看高清完整版在线观看熊 | 久久婷婷丁香| 亚洲精品国产拍免费91在线| 亚洲欧美国产一区二区三区| 国产亚洲一区在线| 欧美激情女人20p| 亚洲一区免费看| 能在线观看的日韩av| 亚洲午夜极品| 悠悠资源网亚洲青| 欧美日韩亚洲成人| 久久成人久久爱| 亚洲欧洲日本一区二区三区| 午夜视频精品| 亚洲精品日本| 国产午夜精品一区二区三区视频 | 娇妻被交换粗又大又硬视频欧美| 欧美国产一区二区| 午夜天堂精品久久久久| 亚洲人成欧美中文字幕| 久久综合九色99| 亚洲自拍高清| 亚洲日本在线观看| 国语自产在线不卡| 国产精品yjizz| 麻豆成人在线观看| 香蕉亚洲视频| 一区二区日韩| 亚洲黄网站在线观看| 久久久久国产一区二区| 在线一区二区视频| 亚洲国产精品一区在线观看不卡| 国产麻豆日韩欧美久久| 欧美视频亚洲视频| 欧美激情综合色| 老色鬼久久亚洲一区二区| 午夜精品国产| 亚洲一区二区三区四区中文| 亚洲精品美女91| 欧美激情国产日韩| 你懂的成人av| 美国十次了思思久久精品导航| 欧美中文在线视频| 午夜精品一区二区三区四区| 亚洲伊人色欲综合网| 亚洲一区二区高清| 一区二区三欧美| 日韩午夜在线观看视频| 99精品欧美一区二区蜜桃免费| 亚洲国产99| 亚洲国产专区| 亚洲欧洲三级| 欧美激情无毛| 日韩一二在线观看| 欧美成年视频| 欧美激情国产日韩精品一区18| 你懂的国产精品| 欧美高清视频在线播放| 亚洲国产老妈| 亚洲精品日韩精品| 一本一道久久综合狠狠老精东影业| 日韩视频一区二区三区在线播放免费观看 | 日韩视频精品在线观看| 夜夜嗨av一区二区三区网页 | 国产欧美日韩在线 | 欧美激情 亚洲a∨综合| 欧美日韩成人一区| 国产精品盗摄久久久| 国产精品影音先锋| 国产一级揄自揄精品视频| 精品99一区二区三区| 亚洲国产黄色| 亚洲婷婷综合色高清在线| 午夜视频在线观看一区二区| 久久精品卡一| 欧美激情亚洲视频| 一区二区高清视频| 午夜精品电影| 女同性一区二区三区人了人一| 欧美日韩日日骚| 国产亚洲欧洲一区高清在线观看 | 国产一区在线播放| 亚洲三级毛片| 午夜精品短视频| 麻豆精品网站| 亚洲精品一区二区三区婷婷月| 亚洲一级黄色片| 久久午夜电影| 国产精品vip| 亚洲激情国产| 久久精品国产亚洲一区二区三区| 亚洲国产精品va在看黑人| 亚洲亚洲精品三区日韩精品在线视频| 久久精品国产一区二区电影| 欧美久久久久| 国产一区二区三区不卡在线观看| 亚洲日本中文字幕| 久久久精品一品道一区| 亚洲免费大片| 蘑菇福利视频一区播放| 国产精品美女久久久免费| 亚洲黄色影院| 久久精品视频免费| 9色精品在线| 可以免费看不卡的av网站| 国产精品免费一区二区三区在线观看 | 国产精品青草久久| 亚洲精品一二区| 免费成人毛片| 性色一区二区| 国产精品免费一区二区三区在线观看| 亚洲精品国精品久久99热一 |