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

成都創(chuàng)新互聯(lián)專(zhuān)注于通化網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供通化營(yíng)銷(xiāo)型網(wǎng)站建設(shè),通化網(wǎng)站制作、通化網(wǎng)頁(yè)設(shè)計(jì)、通化網(wǎng)站官網(wǎng)定制、小程序定制開(kāi)發(fā)服務(wù),打造通化網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供通化網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
一、什么是Linux僵尸進(jìn)程?
在Linux系統(tǒng)中,當(dāng)一個(gè)進(jìn)程終止后,該進(jìn)程不會(huì)被立即刪除,而是留下一些信息供其父進(jìn)程檢查該進(jìn)程的退出狀態(tài)。這時(shí)候,該進(jìn)程被稱(chēng)為“僵尸進(jìn)程”。僵尸進(jìn)程是一種處于“半死狀態(tài)”的進(jìn)程,它不會(huì)占用CPU資源,但會(huì)占用系統(tǒng)的進(jìn)程表等資源。
二、Linux僵尸進(jìn)程的原因
出現(xiàn)僵尸進(jìn)程的原因有很多,以下是一些常見(jiàn)的原因:
1. 父進(jìn)程沒(méi)有處理子進(jìn)程的退出狀態(tài)碼。當(dāng)一個(gè)子進(jìn)程結(jié)束時(shí),Kernel會(huì)向父進(jìn)程發(fā)送一個(gè)信號(hào)(SIGCHLD),告訴父進(jìn)程該子進(jìn)程已經(jīng)結(jié)束。如果父進(jìn)程沒(méi)有處理這個(gè)信號(hào),那么子進(jìn)程就會(huì)成為僵尸進(jìn)程。
2. 父進(jìn)程沒(méi)有正確地調(diào)用wt函數(shù)。wt函數(shù)是用來(lái)等待子進(jìn)程退出的函數(shù)。當(dāng)一個(gè)子進(jìn)程退出時(shí),Kernel會(huì)把子進(jìn)程的退出狀態(tài)碼和一些其他信息保存在內(nèi)核等待隊(duì)列中,等待父進(jìn)程來(lái)調(diào)用wt函數(shù)來(lái)取出這些信息。如果父進(jìn)程沒(méi)有調(diào)用wt函數(shù),那么子進(jìn)程就會(huì)成為僵尸進(jìn)程。
3. 系統(tǒng)資源不足。當(dāng)系統(tǒng)資源不足的時(shí)候,發(fā)生什么情況,什么程序可以執(zhí)行,什么程序不能執(zhí)行?
三、如何避免Linux僵尸進(jìn)程的出現(xiàn)
1. 合理地編寫(xiě)程序,正確處理信號(hào)。程序員應(yīng)該注意處理信號(hào),在子進(jìn)程結(jié)束時(shí)及時(shí)地處理SIGCHLD信號(hào),避免出現(xiàn)僵尸進(jìn)程。
2. 父進(jìn)程調(diào)用wt函數(shù)。父進(jìn)程在創(chuàng)建子進(jìn)程時(shí)可以設(shè)置wt參數(shù),這樣子進(jìn)程結(jié)束后會(huì)自動(dòng)調(diào)用wt函數(shù)來(lái)處理退出狀態(tài)碼等信息。
3. 使用守護(hù)進(jìn)程。守護(hù)進(jìn)程是一種長(zhǎng)時(shí)間運(yùn)行的進(jìn)程,通常用于在后臺(tái)運(yùn)行服務(wù)。它不會(huì)受到用戶退出的影響,因此很少會(huì)出現(xiàn)僵尸進(jìn)程的問(wèn)題。
四、如何處理Linux僵尸進(jìn)程
1. 通過(guò)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. 編寫(xiě)腳本清除多個(gè)僵尸進(jìn)程。可以編寫(xiě)腳本來(lái)批量清除多個(gè)僵尸進(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)問(wèn)題拓展閱讀:
- linux下 top中的d怎么半
- linux的ps命令
linux下 top中的d怎么半
在linux下可以通過(guò)top命令來(lái)查系統(tǒng)運(yùn)行狀態(tài)和進(jìn)程運(yùn)行狀態(tài),通過(guò)man查看top手冊(cè),top的解釋是display Linux tasks,以前看到過(guò)一個(gè)另外的解釋display top CPU processes,這個(gè)我覺(jué)得挺貼切的,因?yàn)閠op這個(gè)命令會(huì)自動(dòng)把消耗高的進(jìn)慎迅遲程排到前面,真的很形象。
1、命令說(shuō)明
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會(huì)定時(shí)刷新?tīng)顟B(tài),這個(gè)值就是設(shè)置刷新幾次
-d:delay進(jìn)入top后,top會(huì)定時(shí)刷新?tīng)顟B(tài),這個(gè)值就是設(shè)置幾秒刷新一次
-b:Batch mode,top刷新?tīng)顟B(tài)默認(rèn)是在原數(shù)據(jù)上刷新,使用這個(gè)參數(shù)后,會(huì)一屏一屏的顯示數(shù)據(jù)。結(jié)合重定向功能和計(jì)劃任務(wù),這個(gè)參數(shù)在記錄服務(wù)器運(yùn)行狀態(tài)時(shí)非常有用。
以上一些參數(shù)是在輸入命令時(shí)提供的參數(shù),在top運(yùn)行的過(guò)程中,還可以輸入一些快捷鍵來(lái)調(diào)整顯示內(nèi)容。
一些命令運(yùn)行時(shí)的快捷鍵說(shuō)明:
q:quit退出程序
M:Memory按照內(nèi)存使用量排序
P:CPU按照cpu使用量排序
k:kill殺死PID的進(jìn)程,不輸入PID,直接按回車(chē)就會(huì)退出
1:能顯示CPU每個(gè)核心的情況
h或者?:help 查看更多快捷鍵
f:fields查看進(jìn)程表頭字段含義
2、命令測(cè)試
top
top命令測(cè)試
之一行說(shuō)明:
top – :系統(tǒng)當(dāng)前時(shí)間
up:服務(wù)器連續(xù)運(yùn)行的時(shí)間,筆者見(jiàn)過(guò)有服務(wù)器連續(xù)運(yùn)行一年以上,linux服務(wù)器還是非常穩(wěn)定的。
user:當(dāng)前有多少用戶登錄系統(tǒng)
load average:這個(gè)邊有3個(gè)數(shù)值分別表示系統(tǒng)在前1分鐘,5分鐘,15分鐘的工作負(fù)載,根據(jù)筆者以往的經(jīng)驗(yàn)來(lái)看單核負(fù)載在3-5之間比較合適,經(jīng)常在1以下,說(shuō)明cpu利用率不高,在5以上,cpu會(huì)處于較高負(fù)載狀態(tài),會(huì)容易宕機(jī)。有一次項(xiàng)目上線,晚上加班觀察服務(wù)器狀況,這個(gè)值長(zhǎng)時(shí)間保持在72左右,因?yàn)榉?wù)器有八核,所以每核的值為9,后來(lái)服務(wù)器就掛了。
第二行就是顯示任務(wù)的數(shù)量情況,其中zombie要注意一下,這個(gè)是表示僵尸進(jìn)程,出現(xiàn)了僵尸進(jìn)程要注意下僵尸進(jìn)程是如何產(chǎn)生的。如果不找到產(chǎn)生原因,即使殺死了,可能也會(huì)再次出現(xiàn)。
第三行表示cpu的運(yùn)行情況,按下1可以顯示每個(gè)核的運(yùn)行情況。
第四行表示內(nèi)存memory的使用情況。
第五行表示交換空間swap的使用情況。
下面顯示的就是進(jìn)程的運(yùn)行狀態(tài)了。每個(gè)表頭表示的含義如下:
PID:進(jìn)程編號(hào)
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)程開(kāi)始運(yùn)行時(shí)使用cpu的總時(shí)間
COMMAND:進(jìn)程運(yùn)行的命令
在top狀態(tài)下按f可以查看表頭字段說(shuō)明。
3、常用的命令:
top -b -n 60 -d 60 > /home/cpu.txt
該命令每隔60秒會(huì)將服務(wù)器運(yùn)行狀寬李態(tài)保存到一個(gè)文本文件,昌好共運(yùn)行60次,其實(shí)就是將服務(wù)器1個(gè)小時(shí)的運(yùn)行狀態(tài)保存起來(lái)。使用這個(gè)命令,可以記錄服務(wù)器在繁忙時(shí)的負(fù)載情況,例如設(shè)置到晚上8點(diǎn)到9點(diǎn)之間,這樣就可以根據(jù)服務(wù)器狀態(tài)作出調(diào)整,而不是等服務(wù)器掛了才來(lái)處理。上面命令各參數(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 每頁(yè)顯示的行數(shù)
–width 每頁(yè)顯示的字符數(shù)
–help 顯示幫助信息
–version 顯示版本顯示
linux命令ps詳解:
使用權(quán)限:所有使用者(用戶)
使用方式:ps
說(shuō)沖返戚明:顯示瞬間行程 (process) 的動(dòng)態(tài)
參數(shù):ps的參數(shù)非常多, 在此僅列出幾個(gè)常用的參數(shù)并大略介紹含義
-A 列出所有的進(jìn)程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細(xì)的資訊
-aux 顯示所有包含其他使用者的行程
常用參數(shù):
-A 顯示所有進(jìn)程(等價(jià)于-e)(utility)
-a 顯示一個(gè)終端的所有進(jìn)程,除了會(huì)話引線
-N 忽略選擇。
-d 顯示所有進(jìn)程,但省略所有的會(huì)話引線(utility)
-x 顯示沒(méi)有控制終端的進(jìn)程,同時(shí)顯示各個(gè)命令的具體路徑。dx不可合用(utility)
-p pid 進(jìn)程使用cpu的時(shí)間
-u uid or username 選擇有效的用戶id或者是用戶名
-g gid or groupname 顯示組的所有進(jìn)程。
U username 顯示該用戶下的所有進(jìn)程,且顯示各個(gè)命令的詳細(xì)路徑
-f 全部列出,通常和其他選項(xiàng)聯(lián)用。如:ps -fa or ps -fx and so on
-l 長(zhǎng)格式(有F,wchan,C 等字段)
-j 作業(yè)格式
-o 用戶自定義格式
v 以虛擬存儲(chǔ)器格式顯示
s 以信號(hào)格式顯示
-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í),顯示每個(gè)程序真正的指令名稱(chēng),而不包含路徑,參數(shù)或常駐服務(wù)的標(biāo)示
4)ps -e 此參數(shù)的效果和指定”A”參數(shù)相同
5)ps e 列出程序時(shí),顯示每個(gè)程序所使用的環(huán)境變量
6)ps f 用ASCII字符顯示樹(shù)狀結(jié)構(gòu),表達(dá)程序間的相互關(guān)系
7)ps -H 顯示樹(shù)狀結(jié)構(gòu),表示程序間的相互關(guān)系
8)ps -N 顯示所有的程序,除了執(zhí)行ps指令終機(jī)下的程世棗序之外
9)ps s 采用程序信號(hào)的格式顯示程序狀況
10)ps S 列出程序時(shí),包括已中斷的子程序資料
11)ps -t 指定終端機(jī)編號(hào),并列出屬于該終端機(jī)的程序的狀況
12)ps u 以用戶為主的格式來(lái)顯示程序狀況
13)ps x 顯示所有程序,不散陵以終端機(jī)來(lái)區(qū)分
最常用的方法是ps -aux,然后再利用一個(gè)管道符號(hào)導(dǎo)向到grep去查找特定的進(jìn)程,然后再對(duì)特定的進(jìn)程進(jìn)行操作。利用一個(gè)管道符號(hào)導(dǎo)向到grep去查找特定的進(jìn)程,然后再對(duì)特定的進(jìn)程進(jìn)行操作。
ps默認(rèn)只會(huì)顯示缺森當(dāng)前終大逗端下的進(jìn)程,加上-l參數(shù),只是進(jìn)程的顯示資料更伏仿畝詳細(xì)些,不會(huì)顯示更多的進(jìn)程,詳細(xì)內(nèi)容可以查看:
ps -aux
linux zombie的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux zombie,Linux僵尸進(jìn)程:如何避免并處理?,linux下 top中的d怎么半,linux的ps命令的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站標(biāo)題:Linux僵尸進(jìn)程:如何避免并處理?(linuxzombie)
網(wǎng)頁(yè)網(wǎng)址:http://m.5511xx.com/article/djeojpj.html


咨詢(xún)
建站咨詢(xún)
