亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Linux 僵尸進程產生原因及解決方法

2024-09-01 13:53:58
字體:
來源:轉載
供稿:網友

Linux 允許進程查詢內核以獲得其父進程的 PID,或者其任何子進程的執行狀態。例如,進程可以創建一個子進程來執行特定的任務,然后調用諸如 wait() 這樣的一些庫函數檢查子進程是否終止。如果子進程已經終止,那么,它的終止代號將告訴父進程這個任務是否已成功地完成。

為了遵循這些設計原則,不允許 Linux 內核在進程一終止后就丟棄包含在進程描述符字段中的數據。只有父進程發出了與被終止的進程相關的 wait() 類系統調用之后,才允許這樣做。這就是引入僵死狀態的原因:盡管從技術上來說進程已死,但必須保存它的描述符,直到父進程得到通知。

如果一個進程已經終止,但是它的父進程尚未調用 wait() 或 waitpid() 對它進行清理,這時的進程狀態稱為僵死狀態,處于僵死狀態的進程稱為僵尸進程(zombie process)。任何進程在剛終止時都是僵尸進程,正常情況下,僵尸進程都立刻被父進程清理了。

僵尸進程是如何產生的

 在UNIX 系統中,一個進程結束了,但是他的父進程沒有等待(調用wait / waitpid)他,那么他將變成一個僵尸進程。通過ps命令查看其帶有defunct的標志。僵尸進程是一個早已死亡的進程,但在進程表 (processs table)中仍占了一個位置(slot)。

但是如果該進程的父進程已經先結束了,那么該進程就不會變成僵尸進程。因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程,看看有沒有哪個 進程是剛剛結束的這個進程的子進程,如果是的話,就由Init進程來接管他,成為他的父進程,從而保證每個進程都會有一個父進程。而Init進程會自動 wait其子進程,因此被Init接管的所有進程都不會變成僵尸進程。

為了觀察到僵尸進程,我們自己寫一個不正常的程序,父進程 fork 出子進程,子進程終止,而父進程既不終止也不調用 wait 清理子進程:

#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(void){  int i = 100;  pid_t pid=fork();  if(pid < 0)  {    perror("fork failed.");    exit(1);  }  if(pid > 0)  {    printf("This is the parent process. My PID is %d./n", getpid());    for(; i > 0; i--)    {      sleep(1);    }  }  else if(pid == 0)  {    printf("This is the child process. My PID is: %d. My PPID is: %d./n", getpid(), getppid());  }  return 0;}

把上面的代碼保存到文件 zomprocdemo.c 文件中,并執行下面的命令編譯:

$ gcc zomprocdemo.c -o zomprocdemo

然后運行編譯出來的 zomprocdemo 程序:

$ ./zomprocdemo

Linux,僵尸進程

此時子進程已經退出,但是父進程沒有退出也沒有通過 wait() 調用處理子進程。我們使用 ps 命令查看進程的狀態:

Linux,僵尸進程

上圖紅框中的大寫字母 "Z" 說明 PID 為 112712 的進程此時處于僵死的狀態。

讓我們接著往下看!在結束 sleep 后父進程退出。當父進程退出后,子進程會變成孤兒進程,此時它會被一個管理進程收養。在不同的系統中,這個管理進程不太一樣,早期一般是 init 進程,Ubuntu 上是 upstart,還有近來的 Systemd。但是它們都完成相同的任務,就是 wiat() 這些孤兒進程,并最終釋放它們占用的系統進程表中的資源。這樣,這些已經僵死的孤兒進程就徹底的被清除了。

僵尸進程的危害

在進程退出的時候,內核釋放該進程所有的資源,包括打開的文件,占用的內存等。但是仍然為其保留一定的信息(包括進程號 PID,退出狀態 the termination status of the process,運行時間 the amount of CPU time taken by the process 等)。直到父進程通過 wait / waitpid 來取時才釋放。

如果進程不調用 wait / waitpid 的話, 那么保留的那段信息就不會釋放,其進程號就會一直被占用,但是系統所能使用的進程號是有限的,如果大量的產生僵死進程,將因為沒有可用的進程號而導致系統不能產生新的進程。

如何處理僵尸進程

僵尸進程的產生是因為父進程沒有 wait() 子進程。所以如果我們自己寫程序的話一定要在父進程中通過 wait() 來避免僵尸進程的產生。

當系統中出現了僵尸進程時,我們是無法通過 kill 命令把它清除掉的。但是我們可以殺死它的父進程,讓它變成孤兒進程,并進一步被系統中管理孤兒進程的進程收養并清理。

下面的 demo 中,父進程通過 wait() 等待子進程結束:

#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(void){  pid_t pid;  pid = fork();  if (pid < 0)  {    perror("fork failed");    exit(1);  }  if (pid == 0) {    int i;     for (i = 3; i > 0; i--)     {      printf("This is the child/n");      sleep(1);     }     // exit with code 3 for test.    exit(3);  }  else  {    int stat_val;    wait(&stat_val);     if (WIFEXITED(stat_val))     {       printf("Child exited with code %d/n", WEXITSTATUS(stat_val));     }        }  return 0;}

demo 中父進程不僅等待子進程結束,還通過 WEXITSTATUS 宏取到了子進程的 exit code。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
综合国产在线观看| 久久久久久久国产| 日韩美女中文字幕| 久久国产精品久久精品| 亚洲欧美日韩中文在线制服| 亚洲精品视频在线观看视频| 亚洲性69xxxbbb| 国产一区二区三区视频免费| 揄拍成人国产精品视频| 亚洲xxxxx电影| 久久久久久久成人| 亚洲女成人图区| 中文字幕不卡av| 在线观看视频亚洲| 亚洲成人激情小说| 国产成人精品免高潮在线观看| 岛国av一区二区三区| 国产69久久精品成人看| 日韩精品中文字幕在线播放| 精品夜色国产国偷在线| 日韩av免费在线播放| 久久精品国产一区二区三区| 日韩在线播放视频| 欧美日韩国产123| 国产精品视频男人的天堂| 成人激情电影一区二区| 欧美在线一区二区视频| 国产日本欧美在线观看| 久久99精品久久久久久噜噜| 欧美专区在线视频| 欧美成人性色生活仑片| 久久国产精品亚洲| 性色av一区二区三区红粉影视| 97免费视频在线| 激情懂色av一区av二区av| 国产一区二区精品丝袜| 亚洲xxxxx性| 欧美激情国产日韩精品一区18| 国产精品扒开腿做爽爽爽男男| 日韩精品免费视频| 精品视频久久久久久久| 亚洲国产精品va在线观看黑人| 久久久亚洲精选| 色综合五月天导航| 欧美日韩国产精品一区二区不卡中文| 色综合伊人色综合网| 国产视频观看一区| 亚洲japanese制服美女| www.国产一区| 精品久久中文字幕| 怡红院精品视频| 久久久在线免费观看| 国产精品男人爽免费视频1| 国产日韩欧美电影在线观看| 色偷偷偷亚洲综合网另类| 亚洲无av在线中文字幕| 国产精品一区二区av影院萌芽| 欧美成人剧情片在线观看| 亚洲人成伊人成综合网久久久| 久久成人精品视频| 久久国产一区二区三区| 欧美亚洲一级片| 91精品免费久久久久久久久| 日韩精品久久久久久福利| 亚洲精品欧美一区二区三区| 日韩欧美精品网站| 欧美大片第1页| 国产精品久久视频| 欧美激情精品久久久久久大尺度| 不卡毛片在线看| 日韩欧美视频一区二区三区| 欧美日韩精品国产| 一区二区三区在线播放欧美| 欧美视频13p| 色综合久久88色综合天天看泰| 欧美xxxx18国产| 亚洲人精选亚洲人成在线| 美日韩在线视频| 国产精品午夜视频| 日韩精品在线观看一区二区| 美女啪啪无遮挡免费久久网站| 日韩毛片中文字幕| 欧美在线激情视频| 精品中文字幕在线| 中文国产成人精品久久一| 色多多国产成人永久免费网站| 亚洲一区二区三区乱码aⅴ| 亚洲精品一区二区三区婷婷月| 亚洲深夜福利在线| 国产91网红主播在线观看| 成人www视频在线观看| 国产z一区二区三区| 91在线中文字幕| 91久久精品日日躁夜夜躁国产| 午夜精品一区二区三区视频免费看| 亚洲区bt下载| 日韩小视频在线观看| 亚洲综合在线播放| 亚洲精品欧美日韩| 亚洲精品一区二区三区婷婷月| 亚洲一区二区三区久久| 日韩在线观看成人| 欧美激情a在线| 久久久久久成人精品| 亚洲精品一区二三区不卡| 91九色国产社区在线观看| 国产亚洲免费的视频看| 精品国产一区二区三区久久| 国产精品视频精品视频| 欧洲美女7788成人免费视频| 亚洲乱码国产乱码精品精天堂| 欧美黑人性视频| 亚洲图片欧洲图片av| 久久精品国产清自在天天线| 亚洲a区在线视频| 在线视频免费一区二区| 亚洲成人aaa| 久久久久久久一区二区| 欧美香蕉大胸在线视频观看| 国产大片精品免费永久看nba| 亚洲四色影视在线观看| 伊人伊成久久人综合网站| 亚洲午夜国产成人av电影男同| 欧美日韩中国免费专区在线看| 欧美视频专区一二在线观看| 国产精品成久久久久三级| 中文字幕亚洲自拍| 亚洲精品免费av| 欧洲永久精品大片ww免费漫画| 欧美成人手机在线| 欧美大荫蒂xxx| 伊人久久大香线蕉av一区二区| 92看片淫黄大片欧美看国产片| 91精品视频一区| 热久久99这里有精品| 国产精品香蕉国产| 亚洲精品视频在线观看视频| 亚洲天堂男人天堂女人天堂| 国色天香2019中文字幕在线观看| 国产成人亚洲综合91精品| 国产精品日韩在线一区| 久久精品国产96久久久香蕉| 国产自产女人91一区在线观看| xxx成人少妇69| 91网在线免费观看| 亚洲国产日韩欧美在线动漫| 成人在线观看视频网站| 国产成人jvid在线播放| 国产91对白在线播放| 久久精品中文字幕一区| 国产精品成人品| 欧美特级www| 亚洲欧美国产一本综合首页| 亚洲欧美日韩天堂一区二区| 欧美一级片在线播放| 久久精品国产2020观看福利| 国产91精品网站| 91在线高清视频| 久久久在线观看| 国产精品入口日韩视频大尺度| 狠狠做深爱婷婷久久综合一区| 欧美极品在线播放| 日韩在线高清视频| 亚洲码在线观看|