殺死linux的殭屍程序

2021-05-25 14:30:22 字數 1222 閱讀 6440

linux並不把程序的樹形結構匯出給普通使用者,然而在核心中,它卻使用樹形結構來管理程序。linux核心使用「子程序退出,父程序收屍,父程序退出,子程序被過繼」這種方式來管理程序的死亡,然而卻少了一種,那就是父程序不給子程序收屍的情況,這就是殭屍程序的原因。

既然知道了殭屍程序為何產生,那麼想乾掉它們就簡單了。記住:任何沒有人為因素的純技術問題都是可以解決的!如何操作呢?很簡單,就三步:

1.將殭屍程序從樹形程序組織中摘除;

2.將殭屍程序過繼給乙個特定的程序;

3.該特定程序呼叫wait來**掉它。

這三步豈不是很麻煩,直接乾掉它的父程序不就得了,這樣核心會自己將殭屍程序過繼給別的程序或者init程序,然而有時我們不能這麼做,如果它的父程序是個很重要的程序咋辦,我們不能因為父輩拋棄了過早去世的孩子而責怪父親,如果那樣,linux核心的法律豈不是比我們還嚴重...既然父親不要孩子了,那麼建立乙個收容所是必要的,使用上述三個步驟完成子程序空殼的過繼和**!這個收容所可以在核心空間也可以在使用者空間,這不是最重要的。本文給出了乙個預研例子:

1.首先給出乙個使用者態程序**:

2.然後給出乙個核心模組**:

上述的模組實現了殭屍程序的**,雖然還不是很完美,然而起碼證實了可行性,我們一些函式的位址還是通過procfs得到的。具體在**潤色方面,我有四個建議,這四個方式無論哪乙個都是可行的,而且花不了太多時間,這裡**就從略了,如果寫一下的話,充其量也只能鍛鍊一下c語言程式設計能力:

1.實現乙個核心執行緒,專門實現模組init函式的邏輯,需要乾掉的殭屍程序號通過procfs傳入核心,然後在write例程中喚醒**殭屍程序的核心執行緒;

2.實現乙個使用者態程序u,掛載乙個訊號a的處理函式,內部實現waitpid,通過procfs傳入或者通過netlink傳入核心的殭屍程序號代表的程序過繼給使用者態程序u,然後向u傳送訊號a;

3./dev/mem的機器碼程式設計或者直接釋放殭屍程序的task_t。

4.在/proc//目錄中加入kill-if-jiangshi檔案,寫入1如果該程序是殭屍,那麼就呼叫上述模組的邏輯殺死它

是不是linux應該提供乙個系統呼叫,用於過繼任何程序呢?不!那樣就會搞亂整個系統,linux並不想把樹形結構匯出給使用者!因此在模組中必須判斷,需要結束的程序的status是「殭屍」!

Linux尋找並殺死殭屍程序

linux伺服器上,多少會出現一些殭屍程序,下面介紹如何快速尋找和消滅這些殭屍程序的方法 首先,我們可以用top命令來檢視伺服器當前是否有殭屍程序,在下圖中可以看到殭屍程序數的提示,如果數字大於0,那麼意味著伺服器當前存在有殭屍程序 下面,我們用ps和grep命令尋找殭屍程序 ps a ostat,...

Linux查詢並殺死殭屍程序

1 檢視系統是否有殭屍程序 使用 top命令 使用top命令查詢,當zombie前的數量不為0時,即系統內存在相應數量的殭屍程序。2 定位殭屍程序 使用命令ps a ostat,ppid,pid,cmd grep e zz 定位殭屍程序以及該殭屍程序的父程序 殭屍程序id 3457,父程序id 34...

linux查詢並殺死殭屍程序

1 檢視系統是否有殭屍程序 使用top命令查詢,當zombie前的數量不為0時,即系統內存在相應數量的殭屍程序。2 定位殭屍程序 使用命令ps a ostat,ppid,pid,cmd grep e 1 定位殭屍程序以及該殭屍程序的父程序 殭屍程序id 3457,父程序id 3425 殭屍程序id ...