日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统编程——僵尸的模拟以及僵尸进程的预防

發布時間:2025/3/15 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统编程——僵尸的模拟以及僵尸进程的预防 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

僵尸進程介紹

子進程終止,父進程尚未回收,子進程殘留資源(PCB)存放于內核中,變成僵尸進程。由于我們的程序也許是7*24小時不宕機的,程序不結束,僵尸進程殘留在PCB中資源就不會被回收,所以我們要清晰的認識僵尸進程,在程序中盡量避免僵尸進程。

僵尸進程模擬

我們通過下面程序來進行模擬僵尸進程,父進程fork()5個子進程,最后一個子進程用于查看僵尸進程,讓父進程最后死亡。

代碼展示

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <error.h> #include <sys/errno.h>void perr(const char* str) {perror(str);exit(1); } int main(int argc,char* argv[]) {pid_t pid;int i;for( i = 0; i < 5;i++ ){if( (pid = fork()) == 0 ){break; //子進程}else if (pid < 0){perr("fork error"); }}if( i < 4 ) //子進程0,1,2,3 最先死亡 模擬僵尸進程{printf("i am child process,pid = %d,ppid = %d.i am died.\n",getpid(),getppid());exit(1);}else if( i==4 ) //子進程4 顯示僵尸進程{sleep(1);printf("i am child process[exec ps],pid = %d,ppid = %d.\n",getpid(),getppid());execlp("ps","ps","j",NULL);}else //父進程活3秒 查看僵尸進程現象 {printf("i am parent process,pid = %d,ppid = %d.i will die after 3s.\n",getpid(),getppid());sleep(3);}return 0; }

僵尸進程現象

僵尸進程預防

如何預防僵尸進程呢?可能很多人都知道,子進程死亡了父進程回收資源唄。對,只要子進程死亡了,父進程負責收尸就行了。
這里有2種方式回收子進程資源。如下:
- 父進程在死亡之前輪詢的去查看子進程是否死亡,死亡了就回收,主要使用wait/waitpid
- 父進程由自己的事情做,子進程死亡了通知父進程收尸,主要使用信號回調signal/sigaction
這里最好的方式當然是采用信號唄,有子進程死亡,父進程才進行回收!

代碼展示

代碼中要注意的是,子進程可能同時終止,同時發送信號,父進程執行信號回調函數但是默認只處理1個,所以要用while進行回收! while( (wpid = waitpid(-1,NULL,WNOHANG)) != -1 );

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <error.h> #include <sys/errno.h> #include <signal.h> #include <wait.h>void perr(const char* str) {perror(str);exit(1); } void wait_child(int signo) {pid_t wpid;//子進程可能同時終止,同時發送信號到這里來默認只處理1個,所以要用while!while( (wpid = waitpid(-1,NULL,WNOHANG)) != -1 );waitpid(-1,NULL,0); } int main(int argc,char* argv[]) {pid_t pid;int i;struct sigaction act;act.sa_flags = 0;act.sa_handler = wait_child; sigemptyset(&act.sa_mask);sigaction(SIGCHLD,&act,NULL);for( i = 0; i < 5;i++ ){if( (pid = fork()) == 0 ){break; //子進程}else if (pid < 0){perr("fork error"); }}if( i < 4 ) //子進程0,1,2,3 最先死亡 模擬僵尸進程{printf("i am child process,pid = %d,ppid = %d.i am died.\n",getpid(),getppid());exit(1);}else if( i==4 ) //子進程4 顯示僵尸進程{sleep(1); printf("i am child process[exec ps],pid = %d,ppid = %d.\n",getpid(),getppid());execlp("ps","ps","j",NULL);}else //父進程活3秒 查看僵尸進程現象{printf("i am parent process,pid = %d,ppid = %d.i will die after 3s.\n",getpid(),getppid());sleep(3);}return 0; }

查看預防效果

總結

以上是生活随笔為你收集整理的Linux系统编程——僵尸的模拟以及僵尸进程的预防的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 巨茎大战刘亦菲 | 成av人片在线观看www | 国产精品久久一区二区三区动 | 国产精品第八页 | 天堂成人在线视频 | 伊人91| 日韩少妇一区 | 中文字幕人妻色偷偷久久 | 伊人365 | 99久久久国产精品无码免费 | 中文字幕乱码在线观看 | 日韩视频h| 亚洲AV无码成人精品国产一区 | 久操免费视频 | 日本一区二区三区视频在线播放 | 亚洲精品资源在线 | 黄色免费播放 | 国产精品96久久久久久 | 国产黄a三级三级三级看三级男男 | 91粉色视频 | 国产真实交换夫妇视频 | 亚洲一区二区久久久 | 欧美日韩另类在线 | 久久91亚洲精品中文字幕奶水 | 天天干网 | 国产日韩不卡 | 国产在线操 | 桃谷绘里香在线播放 | 波多野结衣中文字幕在线 | 久久综合伊人77777麻豆最新章节 | 波多野结衣有码 | 欧美中文字幕视频 | 国内自拍小视频 | 午夜在线精品偷拍 | 精品xxxx | 日韩高清一区二区 | 久久精品123| 色婷婷成人 | 色综合激情| 久久艹av| 国产精品久久久一区二区 | 99ri国产精品| 中文日韩av | 强行挺进白丝老师里呻吟 | 久久女人天堂 | 97自拍视频在线 | 欧美人与性动交g欧美精器 国产在线视频91 | 精品国产999久久久免费 | 一级二级三级视频 | 婷婷久久一区 | 亚洲dvd| 国产51页| 超碰极品 | 国产一二三区精品 | 九九九久久久久 | www.一区二区 | 亚洲欧美高清 | 国产成人午夜 | 欧日韩在线视频 | 免费亚洲一区二区 | 一二三四av | 国产黄在线播放 | 久久妇女| 亚洲欧美精品在线观看 | 国产重口老太伦 | 香蕉福利| 好爽快一点高潮了 | 91av在线免费 | 岛国不卡| 九色影院 | 亚洲欲妇 | 久久99国产精品视频 | 欧美黄色一区 | 中文字幕免费在线观看 | 青草久久久久 | 久草福利在线 | 日韩av大全 | 黄色三级视频网站 | av不卡中文字幕 | 中文av一区二区三区 | 小辣椒福利视频导航 | 国产精品一区二区无码免费看片 | 青娱乐免费在线视频 | 人成在线观看 | 操三八男人的天堂 | 亚洲老女人视频 | 禁断介护av | 天天射干| 欧美日韩一级二级三级 | 射在线| 成人在线观看h | 国产美女视频免费观看下载软件 | 午夜av大片 | 免费在线看黄视频 | 丝袜在线视频 | 青青草自拍视频 | 在线播放你懂得 | 欧美成人国产精品高潮 | 一本色道无码道dvd在线观看 |