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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux的僵尸进程

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux的僵尸进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

僵尸進程的簡單理解

linux中有幾種進程狀態,其中有一種特殊就是僵尸進程,個人理解是可以這樣理解,就是我們 的子進程已經退出了,但是子進程退出了之后無家可歸,就是一個飄移的孤魂野鬼一樣,所以形象的取名字叫做僵尸進程。

僵尸進程的結構

其實僵尸進程識一個進程調用exit退出之后留下的一個數據結構。處于僵尸狀態的進程,幾乎沒有內存空間,沒有可以執行的代碼,也不能被系統調度,他在進程列表中保留了一個位置,用來記錄該進程的退出狀態。

保留僵尸進程的原因

我們不得不反問,一個進程退出了之后,為什么還要處于僵尸進程一段時間呢

一個進程雖然退出了,但是該進程還保留了很多對于程序員或者系統管理員來說有用 的信息。比如,該進程識如何退出的,是正常退出,還是出現了錯誤,還是被其他進程結束掉,總結來說這個進程的退出碼是什么;這個進程占用的CPU時間還有用戶時間是多少。

這些信息都被存儲在僵尸進程中,可以這樣理解,比如一個東東如果莫名其妙的死了,我們總得知道這個東東的尸體在哪里,它是怎么死掉的。

所以進程退出后,系統會把它變成Zombie,然后等待其父進程來回收它。父進程可能正在做其他事情,來不及回收,如果父進程一直不回收,那么該進程在一段時間后就會被系統內核回收掉。

創建一個僵尸進程

下面提供了一段創建僵尸進程的例子

 #include<stdio.h>#include<stdlib.h>int main(){int id = fork();if(id > 0){printf("Parent is sleeping....\n");sleep(5);}if(id == 0){printf("son exit");exit(EXIT_SUCCESS);}return 0;}

程序執行的結果是,首先打印出了Parent is sleeping….,然后另換一行打印出son exit,接著持續了5秒鐘之后程序退出。

我們在執行上面的程序的時候,我們可以再后天進行監視,直接輸入指令ps -ax,然后會發現一個進程是僵尸進程,顯示如下

2653 pts/0    Z+     0:00 [myprocess] <defunct>

收集僵尸進程

收集Zombie進程的信息,并終結這些僵尸進程,需要我們在父進程中使用waitpid調用和wait調用。這兩者的作用都是收集僵尸進程留下的信息,同時使這個進程徹底消失。

總結

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

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