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

linux如何查看僵尸進程

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

linux查看僵尸進程

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

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

linux查看僵尸進程
 

2、定位僵尸進程

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

3、殺死僵尸進程

使用Kill -HUP 僵尸進程ID來殺死僵尸進程,往往此種情況無法殺死僵尸進程,此時就需要殺死僵尸進程的父進程。

kill -HUP 僵尸進程父ID

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

4、參數(shù)解讀

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

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

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

因為狀態(tài)為z或者Z的進程為僵尸進程,所以我們使用grep抓取stat狀態(tài)為zZ進程

linux僵尸進程及僵尸進程的處理

僵尸進程

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

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

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

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

我們的程序在退出的時候:return 0,exit(0),這個0就是退出碼(狀態(tài)信息),它存儲在當前進程的PCB中,會有一個整型值來存儲退出碼。

當我們子進程結(jié)束以后,會把退出碼寫到PCB中,然后希望父進程可以獲得到這個退出碼,然后父進程就可以看到子進程是正常運行結(jié)束還是出錯退出。正常的話我們return 0,失敗的話我們return -1。

模擬僵尸進程:

在這里插入圖片描述

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

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

何處理僵尸進程

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

此時val的值為0

在這里插入圖片描述

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

在這里插入圖片描述

這是為什么呢?

其實768對應的二進制數(shù)為0011 0000 0000,(11就是那個3)

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

這里引入一個概念,在下一期Linux專欄將會講到信號

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

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

總結(jié)

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

相關文章

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

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

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

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

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

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

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

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

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

    CentOS下停止Tomcat運行腳本代碼

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

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

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

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

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

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

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

    致命的7個Linux命令

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

    Linux如何搭建文件服務器

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

最新評論

桂阳县| 峨山| 商丘市| 德州市| 曲阜市| 雅江县| 灵台县| 北京市| 潼关县| 寿宁县| 农安县| 九龙城区| 张北县| 榆林市| 修文县| 冷水江市| 黄山市| 滨海县| 都兰县| 宜州市| 达孜县| 凤城市| 红河县| 广州市| 泽库县| 新乐市| 瑞昌市| 姚安县| 杭锦旗| 辽中县| 霍州市| 论坛| 牡丹江市| 安化县| 蒙山县| 仲巴县| 邛崃市| 麻城市| 萝北县| 新疆| 剑阁县|