本文主要介紹Linux殭屍行程以及清理殭屍行程的方法。
1、什麼是殭屍行程?
Linux中的僵尸进程(Zombie processes)有时也被称为失效或死亡进程。
它们是已执行完毕的进程,但其条目并未从进程表中删除。
1.1 进程状态
Linux 会维护一个进程表,其中包含所有正在运行的进程及其状态。
下面简要介绍一下各种进程状态:
(1)Running (R): 表示这些进程目前正在运行或可运行,用字母 R
表示。需要说明:进程是 R
状态,不代表正在运行,代表可被调度。换句话说,进程只有是 R
状态才可被调度,其他状态要先转为 R
状态,才能被 OS 调度;
(2)Waiting (S/D): 表示这些进程正在等待事件完成或某种资源就绪,用字母 S/D
表示,等待可以是可中断休眠 S
(interruptible sleep) 或不中断休眠 D
(uninterruptible sleep);
(3)Stopped (T): 可以通过发送 SIGSTOP
信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT
信号让进程继续运行。
(4)Zombie (Z): 一个比较特殊的状态。当子进程退出并且父进程没有读取到子进程退出的返回代码时,就会产生僵死(尸)进程。僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入 Z
状态。
1.2 僵尸进程是如何产生的?
当一个进程完成其工作时,Linux 内核会通过发送 SIGCHLD
信号通知其父进程。然后,父进程执行 wait()
系统调用,读取子进程的状态并读取其退出代码。这会清除进程表中子进程条目,从而结束进程。
但是,如果父进程没有在创建子进程时执行 wait()
系统调用,就不会进行适当的清理。在这种情况下,父进程无法监控子进程的状态变化,最终会忽略 SIGCHLD
信号。这将导致已完成进程的僵尸状态留在进程表中,从而使其作为僵尸进程出现在进程列表中。
另一种情况是,父进程无法处理或接收来自子进程的 SIGCHLD
信号,这种情况也会导致僵尸的产生。
1.3 搜索僵尸进程
使用 ps
命令来检索僵尸进程列表:
ps ux USER PID %CPU %MEMVSZ RSS TTYSTAT START TIME COMMAND shubh90.00.0169162760 tty1 SDec19 0:00 /bin/bash --login shubh1080.00.00 0 tty1 Z16:25 0:00 [zombie] <defunct> shubh1090.00.0173841928 tty2 R16:25 0:00 ps ux
从输出中可以看出,STAT
列中的 Z
即为僵尸进程状态,或者使用 awk
命令根据 Z
进程状态进一步过滤输出:
ps ux | awk '{if($8=="Z") print}' shubh 1080.00.00 0 tty1 Z16:25 0:00 [zombie] <defunct>
另一种方法是使用 top
命令:
top Tasks: 8 total, 1 running, 6 sleeping, 0 stopped, 1 zombie %Cpu(s):0.7 us,1.6 sy,0.0 ni, 96.5 id,0.0 wa,1.2 hi,0.0 si,0.0 st KiB Mem :8269412 total,3161228 free,4878832 used, 229352 buff/cache KiB Swap: 15483260 total, 14830144 free, 653116 used.3256848 avail Mem PID USERPRNIVIRTRESSHR S%CPU %MEM TIME+ COMMAND 1 root20 08936192148 S 0.00.0 0:00.17 init 8 root20 08936 96 56 S 0.00.0 0:00.00 init 9 shubh 20 0 16916 2748 2640 S 0.00.0 0:00.43 bash 76 root20 08936224184 S 0.00.0 0:00.00 init 77 shubh 20 0 16784 3432 3332 S 0.00.0 0:00.35 bash 161 shubh 20 0 000 Z 0.00.0 0:00.00 zombie 162 shubh 20 0 17624 2084 1508 R 0.00.0 0:00.00 top
top
除了输出其他详细信息外,还可以在输出顶部的摘要中看到僵尸进程的数量。
2、清理僵尸进程
我们无法真正杀死僵尸进程,因为本身它已经结束了。但是,可以使用一些方法来清理僵尸进程。
2.1 使用 SIGCHLD 信号
可以手动向僵尸进程的父进程发送 SIGCHLD
信号。这样,父进程就会主动触发 wait()
系统调用,从而从进程表中清除已失效的子进程。
找到僵尸进程的父进程 PID:
ps -A -ostat,pid,ppid | grep -e '[zZ]' Z108 103
这里 108 表示僵尸进程 PID,103 表示其父进程 PID,接下来,可以使用 kill
命令向父进程发送 SIGCHLD
信号:
kill -s SIGCHLD 103
不过,并不能保证向父进程发送 SIGCHLD
信号就能杀死僵尸进程。只有在父进程可以处理 SIGCHLD
信号的情况下,它才会起作用。
2.2 kill 父过程
如果上一节的方法无法清除失效进程,就需要考虑杀死其父进程:
kill -9 103
但是,杀死父进程会影响其所有子进程。因此,应该格外谨慎,在杀死父进程之前必须确定其影响。
如果存在大量僵尸进程,或者僵尸进程的父进程是 init 进程(pid=1),可以考虑重启系统来清除失效进程。
以上是Linux如何殺死殭屍行程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在嘗試在Windows 11上啟動Valorts時,您可能會遇到“ Vanguard的這種構建不合規”問題。為什麼出現錯誤消息?如何擺脫錯誤消息?來自PHP.CN的這篇文章提供了詳細信息。

NVIDIA GEFORCE RTX 40系列GPU對您來說可能不是新事物。與其他頂級圖形卡相比,您中的許多人可能會以可接受的價格更加關注中端主流RTX 4050。閱讀PHP.CN網站的本指南以獲取D

KB2267602是Windows Defender的保護或定義更新,旨在修復Windows中的漏洞和威脅。一些用戶報告說他們無法安裝KB2267602。這篇來自PHP.CN的帖子介紹瞭如何修復“ KB2267602 FAI

如果需要這樣做,您知道如何重新安裝Windows 11中的預安裝軟件嗎?在這篇文章中,我們將介紹兩種簡單的方法。此外,如果要在Windows計算機上恢復文件,則可以嘗試使用PHP.CN電源數據恢復。

進行一些更改時,Windows桌面或文件資源管理器或文件夾將自動刷新本身。但是,一些Windows 11/10用戶報告說,他們遇到了“桌面和文件文件夾不會自動刷新”問題。這篇文章f

當您嘗試在Windows 11/10上安裝程序時,您可能無法安裝它並接收錯誤消息 - 此Windows Installer軟件包存在問題。 PHP.CN的這篇文章可幫助您修復它。

當您在設備上運行防病毒軟件時,您可能希望它掃描所有文件和文件夾以獲取病毒。但是,出現一個問題:防病毒掃描可以加密文件嗎?該詢問深入研究了安全與隱私領域。 php.cn So

如何在Windows上下載HDMI視頻驅動程序?如何將HDMI驅動程序更新為最新版本。您可以在這裡找到方法。此外,您可以嘗試使用PHP.CN電源數據恢復,以便在必要時丟失和刪除的文件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。