那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在Linux終止僵尸進程

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2022-12-12 17:40 ? 次閱讀

在了解Zombie進程之前,讓我回憶一下什么是進程。簡而言之,進程是程序實例。它可以是前臺的交互式進程或后臺的非交互式或自動進程。

它可以是父進程,運行時其他進程的創建者。也可以是子進程是由其它進程創建的進程。

Linux除了第一個PID為0的init/systemd初始化進程外,其他每個進程都有一個父進程。

使用pstree命令在終端中的查看進程樹時,也可以查看系統進程的族普。在本教程中將說明如何在Linux終止僵尸進程。

僵尸進程

當子進程死亡時,會通知父進程,以便它可以進行一些清理,例如釋放內存等。

但是存在另一種例外情況是,當子進程比父進程先結束,而父進程又沒有回收子進程,釋放子進程占用的資源。此時子進程將成為一個僵尸進程。

僵尸進程危害

實話說僵尸進程并不像它的名字聽起來那么危險。如果您的系統內存有限或者有太多僵尸進程占用內存,則可能會出現問題。

此外,現在的Linux發行版都可以將進程PID的最大值設置為32768。如果系統進程沒有可用的ID,您的系統可能會崩潰。

這種情況很少發生,但有可能發生,如果一個編碼不當的程序開始產生大量僵尸進程。在這種情況下,最好找到并終止僵尸進程。

查找僵尸進程

Linux中的進程可以是這些狀態之一,D不間斷睡眠,I空閑,R正在運行,S睡眠,T由進程制信號終止,t在跟蹤狀態,通常是被調試器停止。Z僵尸進程。

在查找僵尸進程不妨是先要確認Linux系統存在多少的僵尸進程運行top命令,top命令輸出的第二行行尾包行僵尸進程的計數1 zombie

現在Linux系統僅僅存在一個僵尸進程,因此,我們可以不用終止它。但是當系統存在大量的僵尸進程的你可能就需要終止他們。

要找到Linux系統存在僵尸進程,最簡單方法使用ps命令列出所有進程,然后通過管道傳遞awk命令根據進程狀態過濾僵尸進程。

top
ps ux | awk '{if($8=="Z+") print}'
top - 22:34:07 up 12:11,  1 user,  load average: 1.82, 1.83, 1.64
Tasks: 393 total,   1 running, 391 sleeping,   0 stopped,   1 zombie

終止僵尸進程

僵尸進程已經死了,你如何殺死一個已經死的進程。在僵尸電影中,你可以射擊僵尸的頭部或放火燒它。

但在這里不是一個很好選項。你可以燒毀你的系統來殺死僵尸進程,但這不是一個很好的解決方案。

有些人建議向父進程發送SIGCHLD信號。但它更有可能被忽視。殺死僵尸進程的另一個選擇是殺死其父進程。

這聽起來很殘酷,但這是殺死僵尸進程的唯一可靠方法。在終止僵尸進程之前。讓我們列出僵尸進程PID。這一點可以在終端運行ps命令來實現。

ps ux命令輸出的第8列是進程的狀態。這里通過awk命令僅打印進程狀態為Z+的進程,Z+表示僵尸進程。

確定僵尸進程PID后,讓我們獲取其父進程PID,運行命令ps -o ppid= -p child_process_idchild_process_id是僵尸進程PID。

你也可以運行兩個命令的組合命令ps -A -ostat,pid,ppid | grep -e '[zZ]',命令將直接提供僵尸進程的PID及其父進程的PID。

ps ux | awk '{if($8=="Z+") print}'
ps -o ppid= -p child_process_id_number

ps -A -ostat,pid,ppid | grep -e '[zZ]'
Z+      1828    1754

Z+是子進程的狀態,1828是子進程PID,1754是父進程PID。

現在您獲得了父進程PID,最后運行命令sudo kill -9 parent_process_ID終止進程。parent_process_ID是父進程PID。

當終止父進程后可以再次運行命令ps ux | awk '{if($8=="Z+") print}',確認是否終止僵尸進程,也可以運行top命令查看僵尸進程的計數。

kill -9 
ps ux | awk '{if($8=="Z+") print}'

結論

至此,你已經了解什么是僵尸進程,為什么要終止僵尸進程,如何查找僵尸進程以及終止僵尸進程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210391
  • 進程
    +關注

    關注

    0

    文章

    204

    瀏覽量

    13995
收藏 人收藏

    評論

    相關推薦

    Linux系統下進程的幾種狀態介紹

    文章對 Linux 系統下進程的幾種狀態進行介紹,并對系統出現大量僵尸進程和不可中斷進程的場景進行分析,使用常用的幾種工具進行問題分析定位。
    發表于 11-24 16:15 ?1.3w次閱讀
    <b class='flag-5'>Linux</b>系統下<b class='flag-5'>進程</b>的幾種狀態介紹

    Linux學習雜談】之進程的誕生和消失

    死機。 來看下幾個進程的概念:僵尸進程:(1)子進程先于父進程結束Linux系統設計的時候,當每
    發表于 09-01 20:38

    孤兒進程僵尸進程

    前段時間,由于研究經典面試題,把孤兒進程僵尸進程也總結了一下。我們有這樣一個問題:孤兒進程僵尸進程
    發表于 11-29 14:08

    Linux下的進程結構

    進程不但包括程序的指令和數據,而且包括程序計數器和處理器的所有寄存器及存儲臨時數據的進程堆棧,因此正在執行的進程包括處理器當前的一切活動。 因為Linux是一個多
    發表于 05-27 09:24

    什么是僵尸進程和孤兒進程

    在UNIX里,除了進程0(即PID=0的交換進程,Swapper Process)以外的所有進程都是由其他進程使用系統調用fork創建的,這里調用fork創建新
    發表于 08-02 08:36

    為什么會出現LINUX僵尸進程

    僵尸進程出現在父進程沒有回收子進程的PCB的時候,這個時候子進程已經結束,但是父進程沒有回收他,
    發表于 08-07 06:48

    Linux守護進程詳解

    較長的進程,通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。守護進程常常在系統引導載入時啟動,在系統關閉時終止Linux有很多系統服務,大多數服務都是通過守護
    發表于 10-18 14:24 ?0次下載
    <b class='flag-5'>Linux</b>守護<b class='flag-5'>進程</b>詳解

    僵尸進程的產生介紹和危害以及解決方法

    如果你經常使用 Linux,你應該遇到這個術語“僵尸進程Zombie Processes”。 那么什么是僵尸進程? 它們是怎么產生的? 它們
    的頭像 發表于 12-18 15:56 ?5824次閱讀
    <b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>的產生介紹和危害以及解決方法

    什么是僵尸進程_Linux僵尸進程可以被“殺死”嗎?

    首先要明確一點,僵尸進程的含義是:子進程已經死了,但是父進程還沒有wait它的一個中間狀態,這個時候子進程是一個
    的頭像 發表于 07-28 10:09 ?4722次閱讀
    什么是<b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>_<b class='flag-5'>Linux</b><b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>可以被“殺死”嗎?

    你知道僵尸進程是個什么東西?

    在UNIX系統中,僵尸進程是指完成執行(通過exit系統調用,或運行時發生致命錯誤或收到終止信號所致)但在操作系統的進程表中仍然有一個表項(進程
    發表于 04-22 17:50 ?1262次閱讀

    Linux 系統中僵尸進程

    Linux 系統中僵尸進程和現實中僵尸(雖然我也沒見過)類似,雖然已經死了,但是由于沒人給它們收尸,還能四處走動。僵尸
    發表于 04-02 14:40 ?463次閱讀

    Linux數據中心服務器上的僵尸進程怎樣正確的處理

    。雖然僵尸進程不像運行中的流氓應用程序那樣占用寶貴資源,但可能會構成威脅。
    發表于 09-30 17:29 ?893次閱讀
    <b class='flag-5'>Linux</b>數據中心服務器上的<b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>怎樣正確的處理

    Linux僵尸進程會被殺死嗎?

    那么,根據POSIX標準關于信號(signal)的定義,當我們執行kill -9 4730(4730是4730和4731的TGID,也是整個進程用戶態視角的PID)的時候,是要殺死整個4730進程的,所以這個時候4731被我們殺死,整個
    發表于 08-07 16:48 ?398次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>會被殺死嗎?

    linux下開發避免僵尸進程的方法

    進程ID,退出狀態,占用的資源等等),你可能會問,為什么這么麻煩,直接釋放完資源不就行了嗎?這是因為有時它的父進程想了解它的退出狀態。在子進程退出但還未被其父進程“收尸”之前,該子
    的頭像 發表于 11-11 16:38 ?765次閱讀
    <b class='flag-5'>linux</b>下開發避免<b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>的方法

    如何查看系統是否有僵尸進程

    進程中的指令已經執行完成,但是進程PCB結構還沒有回收。   即子進程先于父進程退出后,子進程的PCB需要其父
    的頭像 發表于 11-29 15:52 ?7558次閱讀
    如何查看系統是否有<b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>
    24山水口吉凶图| 大家旺百家乐的玩法技巧和规则 | 皇冠网上投注网| 百家乐官网庄闲局部失| 百家乐赢率| 赌博投注| 百家乐官网博百家乐官网的玩法技巧和规则 | 365体育投注| 高尔夫百家乐官网的玩法技巧和规则| 真人百家乐赌城| 英山县| 什么是百家乐官网的大路| 游艇会百家乐的玩法技巧和规则| 乐宝百家乐官网游戏| 德州百家乐官网21点桌| 威尼斯人娱乐场图片| 百家乐如何制| 网上现金棋牌| 百家乐最长的缆| 去澳门赌博| 百家乐微心打法| 爱拼百家乐| 百家乐视频挖坑| 爱博彩| 24山入宅择日| 皇廷娱乐| 百家乐网站出售| 马公市| 百家乐单跳| 网上百家乐官网好玩吗| 保单百家乐游戏机厂家| 百家乐官网事电影| 如何看百家乐的玩法技巧和规则| 富易堂百家乐官网娱乐城| 百家乐追号软件| 百家乐官网永利娱乐场| 大发888游戏平台黄埔| 皇冠网百家乐官网啊| 8彩娱乐| 百家乐屏风| 百家乐官网免费破解外挂|