国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

服務器驚現“活死人”?僵尸進程排查、危害與解決全指南

jf_44130326 ? 來源:Linux1024 ? 2026-02-04 17:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在服務器運維中,你是否遇到過這樣的怪事:明明任務已經結束,進程卻像活死人一樣賴著不走,還霸占著進程IDPID)?這就是僵尸進程(Zombie Process在搞鬼。今天,我們不僅拆解它的排查與解決方法,更要講清它對系統的隱藏危害,讓你徹底拿捏這個頑固分子!

一、先搞懂:僵尸進程到底是什么?

簡單來說,僵尸進程是一種半成品狀態(tài)的進程:

?子進程已經運行結束(代碼執(zhí)行完、資源釋放),但父進程沒調用wait()waitpid()回收它的身份信息(比如進程控制塊PCB,存儲進程PID、狀態(tài)等核心數據)。

?它不占CPU、內存,但會占用系統的PID資源——這是它最危險的地方。

二、警惕!僵尸進程對系統的3大危害

很多人覺得僵尸進程不占資源,不用管,但忽略了它的隱性風險,積累到一定程度會直接癱瘓系統:

1.耗盡PID資源,導致新進程無法創(chuàng)建

Linux系統的PID是有限的(默認一般是32768,可通過/proc/sys/kernel/pid_max查看)。若大量僵尸進程堆積,PID會被占滿,此時無論執(zhí)行ls、ssh還是啟動服務,都會報錯“Resource temporarily unavailable”(資源暫時不可用),新進程完全無法創(chuàng)建。

2.增加內核管理負擔

每個僵尸進程的PCB(約幾十字節(jié))會一直存放在內核空間。雖然單個占用小,但thousands級別的僵尸進程會讓內核在遍歷進程列表(如pstop命令)時變慢,間接影響系統響應速度。

3.掩蓋父進程的異常問題

僵尸進程的本質是父進程沒盡責回收。若長期存在僵尸進程,可能意味著父進程本身有bug(如死鎖、信號處理邏輯缺失)或已經卡死——此時不處理,父進程可能會進一步引發(fā)更嚴重的問題(如內存泄漏、業(yè)務中斷)。

三、如何快速揪出僵尸進程?

用兩個命令,輕松鎖定嫌疑犯

1.ps命令:精準篩選僵尸進程

在終端執(zhí)行以下命令,直接過濾出狀態(tài)為Z(僵尸)或包含defunct(已失效)的進程:

wKgZO2kal-eAD-6LAABErXWJcq0930.png
# 方式1:顯示完整信息(推薦)ps aux |grep -E 'Z|defunct'# 方式2:只輸出關鍵信息(PID、父進程PPID、進程名)ps -ef | awk '$8~/Z|defunct/&&$0!~/grep/{print"PID:"$2,"PPID:"$3,"COMMAND:"$8}'

示例輸出(帶STATZ的就是僵尸進程):

USER    PID %CPU %MEM  VSZ  RSS TTY   STAT START  TIME COMMANDroot   12340.00.0  0  0pts/0  Z+ 10:00 0:00[test] 

2.top命令:看僵尸進程總數

執(zhí)行top后,注意頂部狀態(tài)欄的zombie計數(如zombie: 5表示有5個僵尸進程)。若計數不為0,按f鍵勾選PPID字段,再按O鍵按STAT排序,就能快速定位所有Z狀態(tài)的進程。

四、僵尸進程是怎么誕生的?看反面代碼

僵尸進程的根源是父進程偷懶,看這段會產生僵尸進程的錯誤代碼:

#include#include#includeintmain(){ pid_tpid = fork(); // 創(chuàng)建子進程 if(pid ==0) {   // 子進程:執(zhí)行完立即退出   printf("子進程 (PID: %d) 完成任務,退出n",getpid());   exit(0);  }else{   // 父進程:不回收子進程,休眠10秒   printf("父進程 (PID: %d) 休眠中,子進程會變僵尸n",getpid());   sleep(10); // 這10秒內,子進程是僵尸狀態(tài)  } return0;}

問題核心:父進程沒有調用wait()/waitpid()回收子進程,導致子進程退出后,PCB一直留在內核中。

五、如何送走僵尸進程?2種正確代碼+極端方案

解決僵尸進程的核心是讓父進程主動回收子進程資源,以下是兩種常用正確寫法,覆蓋不同場景:

方式1:阻塞等待回收(適用于父進程可暫停的場景)

父進程用waitpid()阻塞等待子進程退出,直接回收資源,簡單直接:

#include#include#include#includeintmain(){ pid_tpid = fork(); if(pid ==0) {   printf("子進程 (PID: %d) 執(zhí)行任務...n",getpid());   sleep(2); // 模擬任務耗時   exit(0);  }else{   printf("父進程等待子進程退出...n");   intstatus;   // 阻塞等待指定子進程,回收資源   waitpid(pid, &status,0);   // 可選:解析子進程退出狀態(tài)(正常/被信號終止)   if(WIFEXITED(status)) {     printf("子進程正常退出,退出碼:%dn",WEXITSTATUS(status));    }   printf("子進程已回收,無僵尸n");  } return0;}

方式2:異步處理(適用于父進程需繼續(xù)干活的場景)

若父進程要同時處理其他任務(如服務端程序),可通過捕獲SIGCHLD信號,在子進程退出時自動回收,不阻塞父進程:

#include#include#include#include#include// 信號處理函數:子進程退出時觸發(fā)voidhandle_sigchld(intsig){ pid_tpid; intstatus; // 非阻塞循環(huán),回收所有已退出的子進程 while((pid =waitpid(-1, &status, WNOHANG)) >0) {   printf("子進程 (PID: %d) 已回收n", pid);  }}intmain(){ // 注冊SIGCHLD信號處理函數 structsigactionsa;  sa.sa_handler = handle_sigchld;  sa.sa_flags = SA_RESTART; // 重啟被信號中斷的系統調用 sigemptyset(&sa.sa_mask); sigaction(SIGCHLD, &sa,NULL); pid_tpid = fork(); if(pid ==0) {   printf("子進程 (PID: %d) 執(zhí)行任務...n",getpid());   sleep(2);   exit(0);  }else{   printf("父進程繼續(xù)處理其他任務...n");   sleep(5); // 父進程的其他工作,不被阻塞   printf("父進程工作結束n");  } return0;}

極端方案:殺死父進程(謹慎!)

若父進程本身卡死、無響應(如死鎖),無法回收子進程,可嘗試殺死父進程(替換<父進程PPID>為實際ID):

# 先優(yōu)雅終止kill<父進程PPID># 若10秒后未退出,強制終止(會中斷父進程業(yè)務,需評估影響)kill-9 <父進程PPID>

父進程死后,其所有子進程(包括僵尸)會被系統的init進程(PID=1)接管,init會自動回收僵尸進程。

六、一張思維導圖,梳理完整排查流程

為了讓你在實際運維中快速上手,整理了「僵尸進程排查驗證全流程」思維導圖,按步驟操作即可:

wKgZO2kal-eAMPrHAAKc5YmqqBA700.png

七、常見誤區(qū)避雷

1.直接kill僵尸進程?沒用!僵尸進程已經死透,kill信號對它無效,必須從父進程入手。

2.少量僵尸不用管?可以,但要警惕!單個僵尸無害,但要排查父進程是否有bug,避免后續(xù)堆積。

3.父進程是init就安全?不一定!init會定期回收,但長期存在init接管的僵尸,說明原父進程頻繁崩潰,需查原進程穩(wěn)定性。

總結

僵尸進程的本質是父進程沒盡責,危害雖不直接,但積累后會癱瘓系統。記住核心解決邏輯:找父進程讓父進程回收預防下次發(fā)生

下次遇到僵尸進程,對照思維導圖一步步來,輕松解決!覺得有用的話,點贊+分享,讓更多運維小伙伴避坑~

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

    關注

    88

    文章

    11758

    瀏覽量

    219006
  • 服務器
    +關注

    關注

    14

    文章

    10251

    瀏覽量

    91480
  • 進程
    +關注

    關注

    0

    文章

    211

    瀏覽量

    14532
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    服務器遠程不上服務器怎么辦?服務器無法遠程的原因是什么?

    運營商。 2.服務器網絡問題 解決辦法:通過路由圖來確定是哪里的線路出現丟包,聯系服務器商切換線路。 二、服務器問題 服務器帶寬跑滿、服務器
    發(fā)表于 02-27 16:21

    孤兒進程僵尸進程

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

    為什么會出現LINUX僵尸進程

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

    進程有幾種狀態(tài)?

    ?線程間同步方法有哪些?什么是內核線程和用戶線程?內核線程和用戶線程的區(qū)別?內核線程和用戶線程有什么優(yōu)缺點?什么是僵尸進程,孤兒進程,守護進程?僵尸
    發(fā)表于 12-24 07:16

    AMD重新構思服務器科技,可支持APU服務器軟件

    AMD重新構思服務器科技,可支持APU服務器軟件,幫助服務器適應現代數據中心工作負載的新一代開發(fā)工具亮相APU13開發(fā)者峰會。
    發(fā)表于 11-15 10:19 ?830次閱讀

    內存轉發(fā)服務器

    內存轉發(fā)服務器
    發(fā)表于 01-04 13:49 ?0次下載

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

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

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

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

    Linux 系統中僵尸進程

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

    GoldBrute僵尸網絡針對150多萬臺RDP服務器發(fā)起攻擊

    新的僵尸網絡出現,150多萬臺RDP服務器很危險!
    的頭像 發(fā)表于 06-11 14:13 ?2798次閱讀

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

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

    Linux服務器常見的網絡故障排查方法

    日常工作中我們有時會遇到服務器網絡不通問題,導致服務器無法正常運行。要想解決服務器網絡故障問題,通常要先進行網絡故障排查,這里以Linux服務器
    的頭像 發(fā)表于 04-14 15:47 ?3985次閱讀

    什么情況下服務器會停止響應?怎么排查

    服務器停止響應意味著什么?在租用網站服務器的過程中,我們總是會遇到各種各樣的問題,比如最麻煩的網站服務器沒有響應。讓我們簡單地談談網站服務器停止響應意味著什么,什么情況會沒有響應,以及
    的頭像 發(fā)表于 05-09 14:37 ?3002次閱讀

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

    進程中的指令已經執(zhí)行完成,但是進程PCB結構還沒有回收。   即子進程先于父進程退出后,子進程的PCB需要其父
    的頭像 發(fā)表于 11-29 15:52 ?9300次閱讀
    如何查看系統是否有<b class='flag-5'>僵尸</b><b class='flag-5'>進程</b>

    如何排查SMTP服務器故障

    丟失,嚴重影響業(yè)務流程和通信效率。 1. 確認故障現象 在開始排查之前,首先需要明確故障的具體表現。這可能包括: 郵件發(fā)送失敗,用戶收到錯誤通知。 郵件發(fā)送延遲,長時間未送達。 郵件丟失,收件人未收到郵件。 SMTP服務器服務
    的頭像 發(fā)表于 10-30 17:42 ?3659次閱讀