日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何在Linux系統(tǒng)中有效防止僵尸進(jìn)程的產(chǎn)生?(linux防止僵尸進(jìn)程)

僵尸進(jìn)程是指已經(jīng)完成執(zhí)行但是父進(jìn)程沒(méi)有及時(shí)回收其資源的進(jìn)程。如果大量的僵尸進(jìn)程堆積在系統(tǒng)中,會(huì)導(dǎo)致系統(tǒng)資源的嚴(yán)重浪費(fèi)。此外,某些惡意程序也可能誘導(dǎo)系統(tǒng)產(chǎn)生大量的僵尸進(jìn)程從而占用系統(tǒng)資源。

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開(kāi)發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)專(zhuān)業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、成都響應(yīng)式網(wǎng)站建設(shè)、電商門(mén)戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!

在Linux系統(tǒng)中,我們可以采取以下措施有效防止僵尸進(jìn)程的產(chǎn)生:

1. 父進(jìn)程及時(shí)回收子進(jìn)程

在Linux系統(tǒng)中,如果父進(jìn)程沒(méi)有及時(shí)回收其子進(jìn)程,子進(jìn)程就會(huì)變成僵尸進(jìn)程。因此,我們可以通過(guò)在父進(jìn)程中使用wt()或wtpid()等系統(tǒng)調(diào)用來(lái)及時(shí)回收子進(jìn)程,并釋放其占用的系統(tǒng)資源。這樣就可以有效地防止僵尸進(jìn)程的產(chǎn)生。

2. 設(shè)置SIGCHLD信號(hào)的處理函數(shù)

在Linux系統(tǒng)中,子進(jìn)程完成后會(huì)向父進(jìn)程發(fā)送SIGCHLD信號(hào)。如果父進(jìn)程沒(méi)有對(duì)該信號(hào)進(jìn)行處理,則會(huì)導(dǎo)致子進(jìn)程變成僵尸進(jìn)程。因此,我們可以在父進(jìn)程中設(shè)置一個(gè)SIGCHLD信號(hào)的處理函數(shù),用來(lái)回收子進(jìn)程。具體的處理函數(shù)可以使用wtpid()等系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)。

3. 使用fork()函數(shù)創(chuàng)建進(jìn)程時(shí),立即調(diào)用exec()函數(shù)

在Linux系統(tǒng)中,創(chuàng)建子進(jìn)程通常使用fork()函數(shù)。但是,如果在子進(jìn)程中沒(méi)有及時(shí)調(diào)用exec()函數(shù),而是直接退出,就會(huì)導(dǎo)致子進(jìn)程變成僵尸進(jìn)程。因此,我們可以在子進(jìn)程中立即調(diào)用exec()函數(shù)來(lái)執(zhí)行其他程序,并在執(zhí)行完畢后退出。這樣就可以避免子進(jìn)程變成僵尸進(jìn)程。

4. 設(shè)置進(jìn)程退出時(shí)的處理函數(shù)

在Linux系統(tǒng)中,我們可以使用atexit()函數(shù)來(lái)設(shè)置進(jìn)程退出時(shí)的處理函數(shù)。這個(gè)處理函數(shù)可以用來(lái)釋放進(jìn)程占用的資源,包括子進(jìn)程。如果父進(jìn)程在退出前能夠回收其子進(jìn)程的資源,就可以避免僵尸進(jìn)程的產(chǎn)生。

要想在Linux系統(tǒng)中有效防止僵尸進(jìn)程的產(chǎn)生,我們需要父進(jìn)程及時(shí)回收子進(jìn)程、設(shè)置SIGCHLD信號(hào)的處理函數(shù)、在子進(jìn)程中立即調(diào)用exec()函數(shù)以及設(shè)置進(jìn)程退出時(shí)的處理函數(shù)。只有通過(guò)這些措施,才能保證系統(tǒng)的穩(wěn)定性和資源的充分利用。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

Linux中的defunct進(jìn)程(僵尸進(jìn)程)

一、什么是defunct進(jìn)程(僵尸進(jìn)程)?

在 Linux 系統(tǒng)中,一個(gè)進(jìn)程結(jié)束了,但是他的父進(jìn)程沒(méi)有等待(調(diào)用wait / waitpid)他,那么他將變成一個(gè)僵尸進(jìn)程。當(dāng)用ps命令觀察進(jìn)程的執(zhí)行狀態(tài)時(shí),看到這些進(jìn)程的狀態(tài)欄為defunct。僵尸進(jìn)程是一個(gè)早已死亡的進(jìn)程,但在進(jìn)程表(processs table)中仍占了一個(gè)位置(slot)。

但是如果該進(jìn)程的父進(jìn)程已經(jīng)先結(jié)束了,那么該進(jìn)程就不會(huì)變成僵尸進(jìn)程。因?yàn)槊總€(gè)進(jìn)程結(jié)束的時(shí)候,系統(tǒng)都會(huì)掃描當(dāng)前系統(tǒng)中所運(yùn)行的所有進(jìn)程,看看有沒(méi)有哪個(gè)進(jìn)程是剛剛結(jié)束的這個(gè)進(jìn)程的子進(jìn)程,如果是的話,就由Init進(jìn)程來(lái)接簡(jiǎn)裂管他,成為他的父進(jìn)程,從而保證每個(gè)進(jìn)程都會(huì)有一個(gè)父進(jìn)程。而Init進(jìn)程會(huì)自動(dòng)wait其子進(jìn)程,因此被Init接管的所有進(jìn)程都不會(huì)變成僵尸進(jìn)程。

二、 Linux下進(jìn)程的運(yùn)作方式

如果子進(jìn)程先于父進(jìn)程退出, 同時(shí)父進(jìn)程又沒(méi)有調(diào)用wait/waitpid,則該子進(jìn)程將成為僵尸進(jìn)程。如果該進(jìn)程的父進(jìn)程已經(jīng)先結(jié)束了,那么該進(jìn)程就不會(huì)變成僵尸進(jìn)程。因?yàn)槊總€(gè)進(jìn)程結(jié)束的時(shí)候,系統(tǒng)都會(huì)掃描當(dāng)前系統(tǒng)中所運(yùn)行的所有進(jìn)程,看看有沒(méi)有哪個(gè) 進(jìn)物告程是剛剛結(jié)束的這個(gè)進(jìn)程的子進(jìn)程,如攔螞閉果是的話,就由Init進(jìn)程來(lái)接管他,成為他的父進(jìn)程,從而保證每個(gè)進(jìn)程都會(huì)有一個(gè)父進(jìn)程。而Init進(jìn)程會(huì)自動(dòng) wait其子進(jìn)程,因此被Init接管的所有進(jìn)程都不會(huì)變成僵尸進(jìn)程。

每個(gè) Linux進(jìn)程在進(jìn)程表里都有一個(gè)進(jìn)入點(diǎn)(entry),核心進(jìn)程執(zhí)行該進(jìn)程時(shí)使用到的一切信息都存儲(chǔ)在進(jìn)入點(diǎn)。當(dāng)用 ps 命令察看系統(tǒng)中的進(jìn)程信息時(shí),看到的就是進(jìn)程表中的相關(guān)數(shù)據(jù)。當(dāng)以fork()系統(tǒng)調(diào)用建立一個(gè)新的進(jìn)程后,核心進(jìn)程就會(huì)在進(jìn)程表中給這個(gè)新進(jìn)程分配一個(gè)進(jìn)入點(diǎn),然后將相關(guān)信息存儲(chǔ)在該進(jìn)入點(diǎn)所對(duì)應(yīng)的進(jìn)程表內(nèi)。這些信息中有一項(xiàng)是其父進(jìn)程的識(shí)別碼。

子進(jìn)程的結(jié)束和父進(jìn)程的運(yùn)行是一個(gè)異步過(guò)程,即父進(jìn)程永遠(yuǎn)無(wú)法預(yù)測(cè)子進(jìn)程到底什么時(shí)候結(jié)束。那么會(huì)不會(huì)因?yàn)楦高M(jìn)程太忙來(lái)不及 wait 子進(jìn)程,或者說(shuō)不知道子進(jìn)程什么時(shí)候結(jié)束,而丟失子進(jìn)程結(jié)束時(shí)的狀態(tài)信息呢?

不會(huì)。因?yàn)?Linux提供了一種機(jī)制可以保證,只要父進(jìn)程想知道子進(jìn)程結(jié)束時(shí)的狀態(tài)信息,就可以得到。這種機(jī)制就是:當(dāng)子進(jìn)程走完了自己的生命周期后,它會(huì)執(zhí)行exit()系統(tǒng)調(diào)用,內(nèi)核釋放該進(jìn)程所有的資源,包括打開(kāi)的文件,占用的內(nèi)存等。但是仍然為其保留一定的信息(包括進(jìn)程號(hào)the process ID,退出碼exit code,退出狀態(tài)the terminationstatus of the process,運(yùn)行時(shí)間the amount of CPU time taken by the process等),這些數(shù)據(jù)會(huì)一直保留到系統(tǒng)將它傳遞給它的父進(jìn)程為止,直到父進(jìn)程通過(guò)wait / waitpid來(lái)取時(shí)才釋放。

也就是說(shuō),當(dāng)一個(gè)進(jìn)程死亡時(shí),它并不是完全的消失了。進(jìn)程終止,它不再運(yùn)行,但是還有一些殘留的數(shù)據(jù)等待父進(jìn)程收回。當(dāng)父進(jìn)程 fork() 一個(gè)子進(jìn)程后,它必須用 wait() (或者 waitpid())等待子進(jìn)程退出。正是這個(gè) wait() 動(dòng)作來(lái)讓子進(jìn)程的殘留數(shù)據(jù)消失。

三、僵尸進(jìn)程的危害

如果父進(jìn)程不調(diào)用wait / waitpid的話,那么保留的那段信息就不會(huì)釋放,其進(jìn)程號(hào)就會(huì)一直被占用,但是系統(tǒng)的進(jìn)程表容量是有限的,所能使用的進(jìn)程號(hào)也是有限的,如果大量的產(chǎn)生僵尸進(jìn)程,將因?yàn)闆](méi)有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程。

所以,defunct進(jìn)程不僅占用系統(tǒng)的內(nèi)存資源,影響系統(tǒng)的性能,而且如果其數(shù)目太多,還會(huì)導(dǎo)致系統(tǒng)癱瘓。而且,由于調(diào)度程序無(wú)法選中Defunct 進(jìn)程,所以不能用kill命令刪除Defunct 進(jìn)程,惟一的方法只有重啟系統(tǒng)。

四、如何殺死defunct進(jìn)程

defunct進(jìn)程是指出錯(cuò)損壞的進(jìn)程,父子進(jìn)程之間不會(huì)再通信。有時(shí),它們會(huì)演變成“僵尸進(jìn)程”,存留在你的系統(tǒng)中,直到系統(tǒng)重啟。可以嘗試 “kill -9” 命令來(lái)清除,但多數(shù)時(shí)候不管用。

為了殺死這些defunct進(jìn)程,你有兩個(gè)選擇:

1.重啟你的計(jì)算機(jī)

2.繼續(xù)往下讀…

我們先看看系統(tǒng)中是否存在defunct進(jìn)程:

$ ps -A|grep defunct

1

輸出

?:00:00 sd_cicero

pts/:01:14 python

pts/:04:43 python

pts/:23:12 python

看看這些進(jìn)程的ID及其父進(jìn)程ID:

$ ps -ef | grep defunct | more

UID PID PPID …

==========================================================================

yourname:07 pts/:00:00 grep –color=auto defunct

yourname:58 ?:00:00

yourname:41 pts/:01:14

yourname:45 pts/:04:43

yourname:48 pts/:23:12

UID:用戶ID

PID:進(jìn)程ID

PPID:父進(jìn)程ID

如果你使用命令 “kill” 嘗試殺死ID為12214的進(jìn)程,可能會(huì)沒(méi)效果。

我們來(lái)試一下

ps -A|grep defunct

輸出

?:00:00 sd_cicero

pts/:01:14 python

pts/:04:43 python

pts/:23:12 python

進(jìn)程12214 仍然存才,說(shuō)明用kill殺不掉它。

要想成功殺死該進(jìn)程,需要對(duì)其父進(jìn)程(ID為12211)執(zhí)行kill命令( ps -A | grep defunct)。

我們來(lái)試一下

ps -A|grep defunct

輸出

?:00:00 sd_cicero

pts/:04:43 python

pts/:23:12 python

Killed bash main.sh

進(jìn)程12214消失,說(shuō)明可以通過(guò)kill僵尸進(jìn)程的父進(jìn)程來(lái)殺死僵尸進(jìn)程。

如果前一個(gè)命令顯示無(wú)結(jié)果,那么搞定!否則,可能你需要重啟一下系統(tǒng)。

參考鏈接:

Linux中如何殺掉僵尸進(jìn)程

1) 檢查當(dāng)前僵尸進(jìn)程信息

# ps -ef | grep defunct | grep -v grep | wc -l175# top | head -2

top – 15:05:54 up 97 days, 23:49, 4 users, load average: 0.66, 0.45, 0.39

Tasks: 829 total, 1 running, 479 sleeping, 174 stopped, 175 zombie

# ps -ef | grep defunct | grep -v grep

2) 獲得裂含殺僵尸進(jìn)程語(yǔ)句

# ps -ef | grep defunct | grep -v grep | awk ‘{print “kill -9 ” $2,$3}’

執(zhí)行上面獲得的語(yǔ)句即可, 使用信號(hào)量9, 僵尸進(jìn)程數(shù)會(huì)大大減高源殲少.

3) 過(guò)一會(huì)兒檢查當(dāng)前僵尸進(jìn)程戚沖信息

# ps -ef | grep defunct | grep -v grep | wc -l125# top | head -2

Tasks: 632 total, 1 running, 381 sleeping, 125 stopped, 125 zombie

發(fā)現(xiàn)僵尸進(jìn)程數(shù)減少了一些, 但還有不少啊.

4) 再次獲得殺僵尸進(jìn)程語(yǔ)句

# ps -ef | grep defunct | grep -v grep | awk ‘{print “kill -18 ” $3}’

執(zhí)行上面獲得的語(yǔ)句即可, 這次使用信號(hào)量18殺其父進(jìn)程, 僵尸進(jìn)程應(yīng)該會(huì)全部消失.

5) 過(guò)一會(huì)兒再檢查當(dāng)前僵尸進(jìn)程信息

關(guān)于linux 防止僵尸進(jìn)程的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!


本文題目:如何在Linux系統(tǒng)中有效防止僵尸進(jìn)程的產(chǎn)生?(linux防止僵尸進(jìn)程)
轉(zhuǎn)載來(lái)源:http://m.5511xx.com/article/dhjjeeh.html