新聞中心
Linux操作系統(tǒng)是一個強(qiáng)大的操作系統(tǒng),它能夠運(yùn)行多個進(jìn)程,在處理器資源有限的情況下,進(jìn)行進(jìn)程管理是必不可少的。然而,Linux系統(tǒng)中常常出現(xiàn)的一個問題就是僵尸進(jìn)程,它會占用系統(tǒng)資源并導(dǎo)致系統(tǒng)性能下降。本文將介紹僵尸進(jìn)程的概念、原因、如何避免以及如何處理。

成都創(chuàng)新互聯(lián)專注于通化網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供通化營銷型網(wǎng)站建設(shè),通化網(wǎng)站制作、通化網(wǎng)頁設(shè)計、通化網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造通化網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供通化網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
一、什么是Linux僵尸進(jìn)程?
在Linux系統(tǒng)中,當(dāng)一個進(jìn)程終止后,該進(jìn)程不會被立即刪除,而是留下一些信息供其父進(jìn)程檢查該進(jìn)程的退出狀態(tài)。這時候,該進(jìn)程被稱為“僵尸進(jìn)程”。僵尸進(jìn)程是一種處于“半死狀態(tài)”的進(jìn)程,它不會占用CPU資源,但會占用系統(tǒng)的進(jìn)程表等資源。
二、Linux僵尸進(jìn)程的原因
出現(xiàn)僵尸進(jìn)程的原因有很多,以下是一些常見的原因:
1. 父進(jìn)程沒有處理子進(jìn)程的退出狀態(tài)碼。當(dāng)一個子進(jìn)程結(jié)束時,Kernel會向父進(jìn)程發(fā)送一個信號(SIGCHLD),告訴父進(jìn)程該子進(jìn)程已經(jīng)結(jié)束。如果父進(jìn)程沒有處理這個信號,那么子進(jìn)程就會成為僵尸進(jìn)程。
2. 父進(jìn)程沒有正確地調(diào)用wt函數(shù)。wt函數(shù)是用來等待子進(jìn)程退出的函數(shù)。當(dāng)一個子進(jìn)程退出時,Kernel會把子進(jìn)程的退出狀態(tài)碼和一些其他信息保存在內(nèi)核等待隊列中,等待父進(jìn)程來調(diào)用wt函數(shù)來取出這些信息。如果父進(jìn)程沒有調(diào)用wt函數(shù),那么子進(jìn)程就會成為僵尸進(jìn)程。
3. 系統(tǒng)資源不足。當(dāng)系統(tǒng)資源不足的時候,發(fā)生什么情況,什么程序可以執(zhí)行,什么程序不能執(zhí)行?
三、如何避免Linux僵尸進(jìn)程的出現(xiàn)
1. 合理地編寫程序,正確處理信號。程序員應(yīng)該注意處理信號,在子進(jìn)程結(jié)束時及時地處理SIGCHLD信號,避免出現(xiàn)僵尸進(jìn)程。
2. 父進(jìn)程調(diào)用wt函數(shù)。父進(jìn)程在創(chuàng)建子進(jìn)程時可以設(shè)置wt參數(shù),這樣子進(jìn)程結(jié)束后會自動調(diào)用wt函數(shù)來處理退出狀態(tài)碼等信息。
3. 使用守護(hù)進(jìn)程。守護(hù)進(jìn)程是一種長時間運(yùn)行的進(jìn)程,通常用于在后臺運(yùn)行服務(wù)。它不會受到用戶退出的影響,因此很少會出現(xiàn)僵尸進(jìn)程的問題。
四、如何處理Linux僵尸進(jìn)程
1. 通過ps命令查看僵尸進(jìn)程。在終端中輸入命令ps -A -ostat,ppid,pid,cmd | grep -e ‘^Z’可以查看當(dāng)前系統(tǒng)中所有的僵尸進(jìn)程。
2. 使用kill命令結(jié)束僵尸進(jìn)程。在終端中輸入命令kill -9 可以結(jié)束指定進(jìn)程的運(yùn)行。
3. 編寫腳本清除多個僵尸進(jìn)程??梢跃帉懩_本來批量清除多個僵尸進(jìn)程,具體操作可以參考腳本如下:
#!/bin/bash
for pid in $(ps -A -ostat,ppid,pid,cmd | grep -e ‘^Z’ | grep -v ‘grep’ | awk ‘{print $2}’) do
kill -9 $pid done
:
相關(guān)問題拓展閱讀:
- linux下 top中的d怎么半
- linux的ps命令
linux下 top中的d怎么半
在linux下可以通過top命令來查系統(tǒng)運(yùn)行狀態(tài)和進(jìn)程運(yùn)行狀態(tài),通過man查看top手冊,top的解釋是display Linux tasks,以前看到過一個另外的解釋display top CPU processes,這個我覺得挺貼切的,因為top這個命令會自動把消耗高的進(jìn)慎迅遲程排到前面,真的很形象。
1、命令說明
top 參數(shù)
-h:help表示顯示幫助的意思
-v:version顯示版本的意思,和-h的功能一樣
-u:user顯示指定用戶的進(jìn)程,例如:top -u root
-p:pid顯示指定進(jìn)程,例如:top -p 1
-n:number進(jìn)入top后,top會定時刷新狀態(tài),這個值就是設(shè)置刷新幾次
-d:delay進(jìn)入top后,top會定時刷新狀態(tài),這個值就是設(shè)置幾秒刷新一次
-b:Batch mode,top刷新狀態(tài)默認(rèn)是在原數(shù)據(jù)上刷新,使用這個參數(shù)后,會一屏一屏的顯示數(shù)據(jù)。結(jié)合重定向功能和計劃任務(wù),這個參數(shù)在記錄服務(wù)器運(yùn)行狀態(tài)時非常有用。
以上一些參數(shù)是在輸入命令時提供的參數(shù),在top運(yùn)行的過程中,還可以輸入一些快捷鍵來調(diào)整顯示內(nèi)容。
一些命令運(yùn)行時的快捷鍵說明:
q:quit退出程序
M:Memory按照內(nèi)存使用量排序
P:CPU按照cpu使用量排序
k:kill殺死PID的進(jìn)程,不輸入PID,直接按回車就會退出
1:能顯示CPU每個核心的情況
h或者?:help 查看更多快捷鍵
f:fields查看進(jìn)程表頭字段含義
2、命令測試
top
top命令測試
之一行說明:
top – :系統(tǒng)當(dāng)前時間
up:服務(wù)器連續(xù)運(yùn)行的時間,筆者見過有服務(wù)器連續(xù)運(yùn)行一年以上,linux服務(wù)器還是非常穩(wěn)定的。
user:當(dāng)前有多少用戶登錄系統(tǒng)
load average:這個邊有3個數(shù)值分別表示系統(tǒng)在前1分鐘,5分鐘,15分鐘的工作負(fù)載,根據(jù)筆者以往的經(jīng)驗來看單核負(fù)載在3-5之間比較合適,經(jīng)常在1以下,說明cpu利用率不高,在5以上,cpu會處于較高負(fù)載狀態(tài),會容易宕機(jī)。有一次項目上線,晚上加班觀察服務(wù)器狀況,這個值長時間保持在72左右,因為服務(wù)器有八核,所以每核的值為9,后來服務(wù)器就掛了。
第二行就是顯示任務(wù)的數(shù)量情況,其中zombie要注意一下,這個是表示僵尸進(jìn)程,出現(xiàn)了僵尸進(jìn)程要注意下僵尸進(jìn)程是如何產(chǎn)生的。如果不找到產(chǎn)生原因,即使殺死了,可能也會再次出現(xiàn)。
第三行表示cpu的運(yùn)行情況,按下1可以顯示每個核的運(yùn)行情況。
第四行表示內(nèi)存memory的使用情況。
第五行表示交換空間swap的使用情況。
下面顯示的就是進(jìn)程的運(yùn)行狀態(tài)了。每個表頭表示的含義如下:
PID:進(jìn)程編號
USER:進(jìn)程所屬用戶
PR/NI:Priority/Nice value進(jìn)程執(zhí)行的優(yōu)先順序
VIRT:Virtual Image (kb) 虛擬內(nèi)存使用總額
RES:Resident size (kb) 常駐內(nèi)存
SHR:Shared Mem size (kb) 共享內(nèi)存
S:Process Status 進(jìn)程狀態(tài)
%CPU:cpu使用率
%MEM:內(nèi)存使用率
TIME+:進(jìn)程開始運(yùn)行時使用cpu的總時間
COMMAND:進(jìn)程運(yùn)行的命令
在top狀態(tài)下按f可以查看表頭字段說明。
3、常用的命令:
top -b -n 60 -d 60 > /home/cpu.txt
該命令每隔60秒會將服務(wù)器運(yùn)行狀寬李態(tài)保存到一個文本文件,昌好共運(yùn)行60次,其實就是將服務(wù)器1個小時的運(yùn)行狀態(tài)保存起來。使用這個命令,可以記錄服務(wù)器在繁忙時的負(fù)載情況,例如設(shè)置到晚上8點(diǎn)到9點(diǎn)之間,這樣就可以根據(jù)服務(wù)器狀態(tài)作出調(diào)整,而不是等服務(wù)器掛了才來處理。上面命令各參數(shù),大家可以根據(jù)自己需要修改。終于不用加班蹲點(diǎn)觀察服務(wù)器了。
linux的ps命令
和top里面是有明粗Ss的
man了一下激卜鎮(zhèn) ps和top
解釋如下
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header “STAT” or “S”弊擾) will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct (“zombie”) process, terminated but not reaped by its parent.
For BSD formats and when the stat keyword is used, additional characters may
be displayed:
列出指定命令的狀況
–lines 每頁顯示的行數(shù)
–width 每頁顯示的字符數(shù)
–help 顯示幫助信息
–version 顯示版本顯示
linux命令ps詳解:
使用權(quán)限:所有使用者(用戶)
使用方式:ps
說沖返戚明:顯示瞬間行程 (process) 的動態(tài)
參數(shù):ps的參數(shù)非常多, 在此僅列出幾個常用的參數(shù)并大略介紹含義
-A 列出所有的進(jìn)程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細(xì)的資訊
-aux 顯示所有包含其他使用者的行程
常用參數(shù):
-A 顯示所有進(jìn)程(等價于-e)(utility)
-a 顯示一個終端的所有進(jìn)程,除了會話引線
-N 忽略選擇。
-d 顯示所有進(jìn)程,但省略所有的會話引線(utility)
-x 顯示沒有控制終端的進(jìn)程,同時顯示各個命令的具體路徑。dx不可合用(utility)
-p pid 進(jìn)程使用cpu的時間
-u uid or username 選擇有效的用戶id或者是用戶名
-g gid or groupname 顯示組的所有進(jìn)程。
U username 顯示該用戶下的所有進(jìn)程,且顯示各個命令的詳細(xì)路徑
-f 全部列出,通常和其他選項聯(lián)用。如:ps -fa or ps -fx and so on
-l 長格式(有F,wchan,C 等字段)
-j 作業(yè)格式
-o 用戶自定義格式
v 以虛擬存儲器格式顯示
s 以信號格式顯示
-m 顯示所有的線程
-H 顯示進(jìn)程的層次(和其它的命令合用
e 命令之后顯示環(huán)境
h 不顯示之一行
最常用的方法是ps -aux,然后再ps命令常用用法(方便查看系統(tǒng)進(jìn)程)
1)ps a 顯示現(xiàn)行終端機(jī)下的所有程序,包括其他用戶的程序
2)ps -A 顯示所有進(jìn)程
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數(shù)或常駐服務(wù)的標(biāo)示
4)ps -e 此參數(shù)的效果和指定”A”參數(shù)相同
5)ps e 列出程序時,顯示每個程序所使用的環(huán)境變量
6)ps f 用ASCII字符顯示樹狀結(jié)構(gòu),表達(dá)程序間的相互關(guān)系
7)ps -H 顯示樹狀結(jié)構(gòu),表示程序間的相互關(guān)系
8)ps -N 顯示所有的程序,除了執(zhí)行ps指令終機(jī)下的程世棗序之外
9)ps s 采用程序信號的格式顯示程序狀況
10)ps S 列出程序時,包括已中斷的子程序資料
11)ps -t 指定終端機(jī)編號,并列出屬于該終端機(jī)的程序的狀況
12)ps u 以用戶為主的格式來顯示程序狀況
13)ps x 顯示所有程序,不散陵以終端機(jī)來區(qū)分
最常用的方法是ps -aux,然后再利用一個管道符號導(dǎo)向到grep去查找特定的進(jìn)程,然后再對特定的進(jìn)程進(jìn)行操作。利用一個管道符號導(dǎo)向到grep去查找特定的進(jìn)程,然后再對特定的進(jìn)程進(jìn)行操作。
ps默認(rèn)只會顯示缺森當(dāng)前終大逗端下的進(jìn)程,加上-l參數(shù),只是進(jìn)程的顯示資料更伏仿畝詳細(xì)些,不會顯示更多的進(jìn)程,詳細(xì)內(nèi)容可以查看:
ps -aux
linux zombie的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux zombie,Linux僵尸進(jìn)程:如何避免并處理?,linux下 top中的d怎么半,linux的ps命令的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁題目:Linux僵尸進(jìn)程:如何避免并處理?(linuxzombie)
本文來源:http://www.dlmjj.cn/article/djeojpj.html


咨詢
建站咨詢
