寫得不好或執行得不好的程式會讓殭屍程序潛伏在Linux計算機中。瞭解殭屍是如何產生的,以及如何讓它們最終安息。
當然,Linux必須跟蹤計算機上執行的所有應用程式和守護程序。其中一種方法是維護程序表。這是核心記憶體中的結構列表。每個程序在此列表中都有一個條目,其中包含有關它的一些資訊。
每個程序表結構中都沒有太多內容。它們包含程序ID、一些其他資料項和指向該程序的程序控制塊(PCB)的指標。
PCB儲存了Linux需要為每個程序查詢或設定的許多細節。PCB也會隨著程序的建立、給定的處理時間以及最終的銷燬而更新。
Linux PCB包含超過95個欄位。它被定義為一個名為task_struct.h的結構,長度超過700行。PCB包含以下型別的資訊:
“程序狀態”可以是以下任一狀態:
在Zombie狀態下,建立子程序時,父程序呼叫wait()函式族之一。然後等待子程序中的狀態更改。子程序是否已被訊號停止、繼續或終止?它是否透過執行程式碼的自然完成而終止?
如果狀態更改意味著子程序已停止執行,則讀取其退出程式碼。然後,銷燬子PCB並刪除其在程序表中的條目。理想情況下,這一切都發生在眨眼之間,處於殭屍狀態的程序不會存在很長時間。
相關:如何在Linux上執行和控制後臺程序
編寫不好的父程序在建立子程序時可能不會呼叫wait()函式。這意味著沒有任何東西在監視子程序中的狀態變化,SIGCHLD訊號將被忽略。或者,另一個應用程式正在影響父程序的執行,這可能是由於程式設計不當或惡意意圖造成的。
但是,如果父程序沒有監視子程序中的狀態更改,則不會進行適當的系統內務管理。當子程序終止時,不會刪除PCB和程序表中的條目。這將導致殭屍狀態永遠不會從PCB中移除。
殭屍確實需要一些記憶體,但它們通常不會造成問題。程序表中的條目很小,但是在它被釋放之前,程序ID不能被重用。在64位作業系統上,這不太可能導致任何問題,因為PCB比程序表條目大得多。
可以想象,大量的殭屍會影響其他程序的可用記憶體量。但是,如果你有那麼多殭屍,那麼你的父應用程式或作業系統有一個嚴重的問題。
你不能殺死殭屍程序,因為它已經死了。它不會對任何訊號做出響應,因為它已經從記憶體中刪除了,沒有地方可以傳送SIGKILL訊號。您可以嘗試向父程序傳送SIGCHLD訊號,但是如果在子程序終止時它不起作用,那麼現在也不太可能起作用。
唯一可靠的解決方案是終止父程序。終止時,它的子程序由init程序繼承,init程序是在Linux系統中執行的第一個程序(其程序ID為1)。
init程序定期執行必要的殭屍清理,所以要殺死它們,只需殺死建立它們的程序。top命令是檢視是否有殭屍的方便方法。
鍵入以下內容:
top這個系統有八個殭屍程序。我們可以使用ps命令並將其管道化到egrep中來列出這些。同樣,zombie程序的狀態標誌是“Z”,您通常還會看到“defunct”
鍵入以下內容:
ps aux | egrep "Z|defunct"將列出殭屍程序。
這是一個更整潔的方式來發現殭屍的程序ID比在頂部來回滾動。我們還看到一個名為“badprg”的應用程式產生了這些殭屍。
第一個殭屍的程序ID是7641,但是我們需要找到其父程序的程序ID。我們可以再次使用ps。我們將使用output選項(-o)告訴ps只顯示父程序ID,然後用ppid=flag傳遞它。
我們要查詢的程序將透過使用-p(process)選項來指示,然後傳入zombie的程序ID。
因此,我們鍵入以下命令來查詢程序7641的程序資訊,但它只報告父程序的ID:
ps -o ppid= -p 7641我們被告知父程序ID是7636。我們現在可以再次使用ps來交叉引用。
我們看到它與前面的父程序的名稱相匹配。要終止父程序,請將SIGKILL選項與kill命令一起使用,如下所示:
kill -SIGKILL 7636根據父程序的所有者,您可能還需要使用sudo。
…除非他們在一個龐大的部落裡。有幾個是不需要擔心的,一個簡單的重啟將消滅他們。
但是,如果您注意到某個應用程式或程序總是在生成殭屍,那麼您應該對此進行研究。它很可能只是一個草率編寫的程式,在這種情況下,可能有一個更新的版本,可以在其子程序之後進行適當的清理。
你不必等到萬聖節才能享受一個好的恐怖遊戲。而說到殭屍,不死生物肯定會在一年中的任何時候出現。從卡通風格的休閒遊戲到逼真的第一人稱射擊遊戲,這裡有8款很棒的移動殭屍遊戲來測試你的生存技能。 ...
...創造沉浸式氛圍的遊戲,這就是適合你的遊戲。看看它是如何排名在最漂亮的棋盤遊戲與非凡的藝術品! ...
...是最好的應用程式也可能掛起。與其等待它們崩潰,不如殺死這些沒有響應的程式。事實上,有很多方法可以殺死Linux程式,你可能會發現自己被寵壞了! ...
網路安全是一個永恆的戰場。2017年,安全研究人員每天發現約23000個新的惡意軟體樣本(即每小時795個)。 ...
... 讓我們看看殭屍網路的力量是如何擴張的,以及你聽到的下一個巨大的DDoS將如何比上一個更大。 ...