最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux如何查看僵尸進(jìn)程

 更新時(shí)間:2023年03月23日 10:05:19   作者:代元培  
這篇文章主要介紹了linux如何查看僵尸進(jìn)程問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

linux查看僵尸進(jìn)程

1、查看系統(tǒng)是否有僵尸進(jìn)程

使用Top命令查找,當(dāng)zombie前的數(shù)量不為0時(shí),即系統(tǒng)內(nèi)存在相應(yīng)數(shù)量的僵尸進(jìn)程。

linux查看僵尸進(jìn)程
 

2、定位僵尸進(jìn)程

使用命令ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'定位僵尸進(jìn)程以及該僵尸進(jìn)程的父進(jìn)程。

3、殺死僵尸進(jìn)程

使用Kill -HUP 僵尸進(jìn)程ID來殺死僵尸進(jìn)程,往往此種情況無法殺死僵尸進(jìn)程,此時(shí)就需要?dú)⑺澜┦M(jìn)程的父進(jìn)程。

kill -HUP 僵尸進(jìn)程父ID

然后使用上面第二步的語句查詢該僵尸進(jìn)程是否被殺死。

4、參數(shù)解讀

ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'

-A  參數(shù)列出所有進(jìn)程

-o  自定義輸出字段 stat(狀態(tài))、ppid(進(jìn)程父id)、pid(進(jìn)程id)、cmd(命令)

因?yàn)闋顟B(tài)為z或者Z的進(jìn)程為僵尸進(jìn)程,所以我們使用grep抓取stat狀態(tài)為zZ進(jìn)程

linux僵尸進(jìn)程及僵尸進(jìn)程的處理

僵尸進(jìn)程

(1)進(jìn)程中的指令已經(jīng)執(zhí)行完成,但是進(jìn)程PCB結(jié)構(gòu)還沒有回收。

即子進(jìn)程先于父進(jìn)程退出后,子進(jìn)程的PCB需要其父進(jìn)程釋放,但是父進(jìn)程并沒有釋放子進(jìn)程的PCB,這樣的子進(jìn)程就稱為僵尸進(jìn)程。

(2)父進(jìn)程未結(jié)束,子進(jìn)程結(jié)束,但父進(jìn)程沒有處理子進(jìn)程的退出狀態(tài)(當(dāng)子進(jìn)程先于父進(jìn)程結(jié)束,父進(jìn)程沒有獲取子進(jìn)程的退出碼,子進(jìn)程的PCB會(huì)保留一段時(shí)間等待父進(jìn)程在PCB中獲取退出碼,,且該進(jìn)程不可執(zhí)行,此時(shí)子進(jìn)程變成僵尸進(jìn)程)。

直到父進(jìn)程獲取到子進(jìn)程的退出狀態(tài),子進(jìn)程的PCB才會(huì)被移除。

我們的程序在退出的時(shí)候:return 0,exit(0),這個(gè)0就是退出碼(狀態(tài)信息),它存儲(chǔ)在當(dāng)前進(jìn)程的PCB中,會(huì)有一個(gè)整型值來存儲(chǔ)退出碼。

當(dāng)我們子進(jìn)程結(jié)束以后,會(huì)把退出碼寫到PCB中,然后希望父進(jìn)程可以獲得到這個(gè)退出碼,然后父進(jìn)程就可以看到子進(jìn)程是正常運(yùn)行結(jié)束還是出錯(cuò)退出。正常的話我們r(jià)eturn 0,失敗的話我們r(jià)eturn -1。

模擬僵尸進(jìn)程:

在這里插入圖片描述

僵死進(jìn)程產(chǎn)生了,會(huì)有什么影響?

  • 如果只有一兩個(gè)僵死進(jìn)程,沒有什么影響。
  • 如果有很多個(gè)僵死進(jìn)程,持續(xù)不斷的產(chǎn)生,就有影響了,因?yàn)樽舆M(jìn)程的PCB如果沒有被釋放,進(jìn)程的PID就被一直占著,在內(nèi)核空間中,PCB本身是結(jié)構(gòu)體,會(huì)占用內(nèi)存空間,對系統(tǒng)軟硬件資源損耗,因此我們要避免僵死進(jìn)程的產(chǎn)生,父進(jìn)程有義務(wù)去處理!

何處理僵尸進(jìn)程

父進(jìn)程調(diào)用wait()方法獲取子進(jìn)程的退出碼,從而使得OS刪除子進(jìn)程的PCB;

父進(jìn)程先結(jié)束(該子進(jìn)程就失去了父進(jìn)程,系統(tǒng)會(huì)將這種沒有子進(jìn)程的父進(jìn)程當(dāng)做孤兒進(jìn)程OS會(huì)給該孤兒進(jìn)程重新尋找一個(gè)父進(jìn)程Init進(jìn)程,其PID == 1,通常會(huì)收養(yǎng)那些沒有父進(jìn)程的子進(jìn)程,就會(huì)直接獲取其退出碼從而消除該進(jìn)程的僵死狀態(tài) [ 其內(nèi)部其實(shí)也是調(diào)用了wait()方法] )

如下圖所示,修改之前的代碼,讓父進(jìn)程先于子進(jìn)程結(jié)束

在這里插入圖片描述

執(zhí)行結(jié)果如下:

在這里插入圖片描述

我們可以看到失去父進(jìn)程的子進(jìn)程的PPID變?yōu)?,也就是Init進(jìn)程

在這里插入圖片描述

父進(jìn)程處理子進(jìn)程退出狀態(tài)(退出碼)的方法

pid_t wait(int *result)//獲取調(diào)用此方法的進(jìn)程的子進(jìn)程的退出碼
  • 如果沒有子進(jìn)程,則調(diào)用失敗;
  • 如果有子進(jìn)程并且已經(jīng)結(jié)束,則返回子進(jìn)程的PID,退出碼在result帶回。
  • 如果子進(jìn)程沒有結(jié)束,那么wait就會(huì)阻塞等待子進(jìn)程結(jié)束。

我們來看一下wait的參考手冊:

在這里插入圖片描述

我們需要傳入一個(gè)整形變量的地址,它會(huì)將退出碼寫到該地址中,返回值就是他獲取到退出碼的那個(gè)子進(jìn)程的PID。

在這里插入圖片描述

執(zhí)行結(jié)果如下:這樣就相當(dāng)于父子進(jìn)程是串行執(zhí)行的,因此我們不會(huì)很簡單粗暴地調(diào)用wait(),失去了多進(jìn)程執(zhí)行的意義,常會(huì)使用一些巧妙的方法,比如配合信號(hào)使用,這個(gè)在后面的博客中將會(huì)提到。

出現(xiàn)這種現(xiàn)象的原因是:父進(jìn)程需要獲取子進(jìn)程的退出碼,就需要等待子進(jìn)程先結(jié)束,既然子進(jìn)程沒有結(jié)束,就無法獲取子進(jìn)程的退出碼,wait()方法就相當(dāng)于阻塞了父進(jìn)程的運(yùn)行。

在這里插入圖片描述

如果有多個(gè)子進(jìn)程,一次wait調(diào)用只能處理一個(gè)子進(jìn)程(最先結(jié)束的哪一個(gè))。

如下代碼也用wait處理了僵尸進(jìn)程,但我們需要解決另外一個(gè)問題:

注意:此時(shí)我們exit(0)的退出碼是0

在這里插入圖片描述

此時(shí)val的值為0

在這里插入圖片描述

但是當(dāng)我們將退出碼改為3時(shí),執(zhí)行結(jié)果發(fā)生了變化,我們可以看到val = 768

在這里插入圖片描述

這是為什么呢?

其實(shí)768對應(yīng)的二進(jìn)制數(shù)為0011 0000 0000,(11就是那個(gè)3)

——左移了8位,因?yàn)橥顺龃a一般來說是128以內(nèi)的值,但是一個(gè)整型有4字節(jié),1個(gè)字節(jié)本來就夠存儲(chǔ)退出碼了,其他3個(gè)字節(jié)有別的作用了,所以在這里就發(fā)現(xiàn)被移位了,存儲(chǔ)在該存儲(chǔ)的位上。我們這怎么處理?

操作位是不大方便的,但是系統(tǒng)給我們提供了一些方法

  • 第一個(gè)宏是用來判斷程序是否是正常exit退出
  • 如果是正常退出,就通過第二個(gè)宏得出退出碼,這個(gè)宏就知道我們的退出碼是在4個(gè)字節(jié)中的哪個(gè)字節(jié)存放的,精準(zhǔn)取值,此時(shí)拿到的就是我們設(shè)定的3了,不是768了。

在這里插入圖片描述

當(dāng)程序還沒有執(zhí)行到exit就被殺死,獲取到異常終止的信號(hào),我們就用下面這個(gè)宏來判斷

在這里插入圖片描述

使用宏后,我們修改代碼如下:

在這里插入圖片描述

之后就可以看到正常的執(zhí)行結(jié)果了

在這里插入圖片描述

wait調(diào)用的最佳時(shí)機(jī):子進(jìn)程退出的那一時(shí)刻,父進(jìn)程調(diào)用wait;

這里引入一個(gè)概念,在下一期Linux專欄將會(huì)講到信號(hào)

若在父進(jìn)程一開始就調(diào)用,那么就會(huì)出現(xiàn)串行執(zhí)行的效果;

若在父進(jìn)程快要結(jié)束的時(shí)候調(diào)用,那么父進(jìn)程已經(jīng)退出,處理僵尸進(jìn)程就沒有意義了。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vim的一些常用簡單操作小結(jié)

    vim的一些常用簡單操作小結(jié)

    大家都知道vim在Linux下使用很多,但是習(xí)慣了在Windows下的文本操作,在vim中進(jìn)行文本操作會(huì)覺得很不方便,但是vim是一個(gè)很強(qiáng)大的工具,只是還不熟練去使用它,下面是一些常用的vim文本操作方法。
    2016-09-09
  • Linux多塊硬盤如何掛載到同一目錄

    Linux多塊硬盤如何掛載到同一目錄

    文章介紹了如何使用LVM(邏輯卷管理)將多塊硬盤合并為一個(gè)邏輯卷,并詳細(xì)描述了操作流程,包括創(chuàng)建物理卷、卷組和邏輯卷,以及格式化和掛載邏輯卷
    2025-02-02
  • Flume環(huán)境部署和配置詳解及案例大全

    Flume環(huán)境部署和配置詳解及案例大全

    flume是一個(gè)分布式、可靠、和高可用的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接受方(比如文本、HDFS、Hbase等)的能力 。
    2014-08-08
  • linux下cpu飆高原因排查過程詳解

    linux下cpu飆高原因排查過程詳解

    大家好,本篇文章主要講的是linux下cpu飆高原因排查過程詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下哦
    2021-11-11
  • CentOS下停止Tomcat運(yùn)行腳本代碼

    CentOS下停止Tomcat運(yùn)行腳本代碼

    這篇文章主要介紹了CentOS下停止Tomcat運(yùn)行腳本代碼,需要的朋友可以參考下
    2014-11-11
  • Ubuntu配置靜態(tài)IP的兩種方法

    Ubuntu配置靜態(tài)IP的兩種方法

    在本教程中,您將了解有關(guān) Ubuntu 靜態(tài) IP 地址配置的所有信息,我們將為讀者Ubuntu配置靜態(tài)IP的兩種方法以及詳細(xì)的配置過程,通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Apache與Tomcat服務(wù)器整合的基本配置方法及概要說明

    Apache與Tomcat服務(wù)器整合的基本配置方法及概要說明

    網(wǎng)上的亂七八糟的資料太多了,很多都是自說自話,希望這篇文章能給大家?guī)硪恍┣逦乃悸贰?/div> 2010-12-12
  • linux系統(tǒng)終端修改字體的方法

    linux系統(tǒng)終端修改字體的方法

    我們以debian為例,介紹兩種linux修改終端字體的設(shè)置方法,大家參考使用吧
    2014-01-01
  • 致命的7個(gè)Linux命令

    致命的7個(gè)Linux命令

    如果你是一個(gè) Linux 新手,在好奇心的驅(qū)使下,可能會(huì)去嘗試從各個(gè)渠道獲得的命令。以下是 7 個(gè)致命的 Linux 命令,輕則使你的數(shù)據(jù)造成丟失,重則使你的系統(tǒng)造成癱瘓,所以,你應(yīng)當(dāng)竭力避免在系統(tǒng)中運(yùn)行它們
    2014-03-03
  • Linux如何搭建文件服務(wù)器

    Linux如何搭建文件服務(wù)器

    這篇文章主要介紹了Linux如何搭建文件服務(wù)器,包括基于centos7.9搭建http文件服務(wù)器,基于centos7.9搭建nginx文件服務(wù)器以及基于ubuntu2204搭建http文件服務(wù)器,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10

最新評(píng)論

黑山县| 海城市| 博白县| 乐都县| 左贡县| 晋宁县| 弥勒县| 方城县| 隆回县| 岗巴县| 安徽省| 崇礼县| 桦甸市| 固镇县| 新兴县| 北票市| 固镇县| 巴楚县| 金秀| 仁化县| 调兵山市| 余姚市| 行唐县| 如皋市| 阜阳市| 自贡市| 墨竹工卡县| 玉溪市| 武穴市| 乐安县| 文登市| 乌拉特后旗| 永定县| 和政县| 石狮市| 体育| 台安县| 辽宁省| 绵阳市| 慈溪市| 石城县|