編寫一unix 程式,防止殭屍程序的出現

2025-03-28 15:15:09 字數 1796 閱讀 2932

1樓:網友

編寫含槐拍乙個自己的守護程序,定時去檢查系統明銀中是否有殭屍程序,如果發現有,就將其殺死。

可以結合系統命令ps,kill等。

不過有2個問題,首先有些程序是可談羨能不響應訊號的,kill可能殺不掉。

另外,好像init程序本身就有這個功能?

linux 程式設計關於殭屍程序的疑惑~

2樓:網友

當然會成為殭屍程序,你的c、d子程序比父程序先結束,在fork ()/execve()過程中,假設子程序結束時父程序仍存在,而父程序fork()之前既沒安裝sigchld訊號處理函式呼叫waitpid()等待子程序結束,又沒有顯式忽略該訊號,則子程序成為殭屍程序,無法正常結束,此時即使是root身份kill -9也不能殺死殭屍程序。補救辦法是殺死殭屍程序的父程序(殭屍程序的父程序必然存在),殭屍程序成為"孤兒程序",過繼給1號程序init,init始終會負責清理殭屍程序。

殭屍程序的避免:

1) 父程序通過wait和waitpid等函式等待子程序結束,這會導致父程序掛起。

2) 如果父程序很忙,那麼可以用signal函式為sigchld安裝handler,因為子程序結束後, 父程序會收到該訊號,可以在handler中呼叫wait**。

3) 如果父程序不關心子程序什麼時候結束,那麼可以用signal(sigchld, sig_ign) 通知核心,自己對子程序的結束不感興趣,那麼子程序結束後,核心會**, 並不再給父程序傳送訊號。

4) 還有一些技巧,就是fork兩次,父程序fork乙個子程序,然後繼續工作,子程序fork一 個孫程序後退出,那麼孫程序被init接管,孫程序結束後,init會**。不過子程序的** 還要自己做。

3樓:網友

必須得變成殭屍程序了。

可以使用signal(sigchld, func);

然後在func函式里while(waitpid())

4樓:網友

應該和他們退出的時間有關係吧。如果早於父程序結束,那麼變成殭屍程序了。

unix/linux系統中殭屍程序是如何產生的?有什麼危害?如何避免

5樓:網友

乙個程序在呼叫exit命令結束自己的生命的時候,其實他並沒有真正的被銷燬,而是留下乙個稱為殭屍程序(zombie)的資料結構(系統呼叫exit,他的作用是使程序退出,但是也僅僅限於乙個正常的程序變成了乙個殭屍程序,並不能完全將其銷燬)。在linux程序的狀態中,殭屍程序是非常特殊的一種,它已經放棄了幾乎所有的記憶體空間,沒有任何可執行**,也不能被排程,僅僅在程序列表中保留乙個位置,記載該程序的退出狀態資訊供其他程序收集,除此之外,殭屍程序不再佔有任何儲存空間。他需要他的父程序來為他收屍,如果他的父程序沒有安裝sigchld訊號處理函式呼叫wait 或 waitpid() 等待子程序結束,有沒有顯式忽略該訊號,那麼它就一直保持殭屍狀態,如果這時候父程序結束了,那麼init程序會自動接手這個子程序,為他收屍,他還是能被清除掉的。

但是如果父程序是乙個迴圈,不會結束,那麼子程序就會一直保持殭屍狀態,這就是系統中為什麼有時候會有很多的殭屍程序。

避免zombie的方法。

1)在svr4中,如果呼叫signal或是sigset將sigchld的配置設定為忽略,則不會產生僵死子程序。另外,使用svr4版本sigaction,則可設定sa_nocldwait標誌以避免子程序僵死。linux中也可以使用這個,在乙個程式開始呼叫這個函式signal(sigchld,sig_ign);

2)呼叫fork兩次。

3)用waitpid等待子程序返回。

C語言編寫程式計算C語言編寫一個程式計算。。。

親,你的程式迴圈copy永遠不會停止 bai此句for i 1 fabs 1 i i 1 1e 6 i i永遠大於0 所以不會停du止 所以沒輸出入 沒錯zhi誤計算機只能計算有限的數值,這dao種無限逼近型的不能用這種方法算的 fabs 1 i i 1 有錯誤,bai 1 i i 1 1 i i ...

C 編寫小程式(思路即可),C 編寫一個小程式(思路即可)

求出該整數的各個位 比如 125,百位為1,十位為2,個位為5 依次放入int型陣列,x 另外定義一個9個大小的int陣列a,初始化為0然後迴圈,每個迴圈裡switch x i case 1 a 0 省略 第一步 先判斷輸入的整數是多少位的,比如輸入的是 123 就是三位的 第二步 將這個數除以10...

用jsp編寫猜數遊戲程式,用JSP編寫一個猜數遊戲程式

你馬上找一本書看,是清華大學出的黑魔方系列中的一本,叫 jsp基礎教程 耿祥義編著 上面的 和你需要的功能一摸一樣,太長了,我沒有時間敲,你自己看看吧 肯定對你有幫助 恰好能解決你的問題 編寫一個猜數字的程式,當客戶訪問伺服器上的guess.jsp時,隨機分配給客戶一個1 100之間的數字,然後將這...