什麼是殭屍程序,有何危害?怎麼避免殭屍程序?

2021-06-28 06:19:38 字數 500 閱讀 5751

什麼是殭屍程序?

當子程序(child process)先於父程序(parent process)退出,但是父程序沒有呼叫wait/waitpid**子程序的資源,則子程序變成殭屍程序。

但是如果該程序的父程序已經結束,那該程序就不會變成殭屍程序,因為每個程序結束的時候,系統會掃瞄所有執行中的程序,看看有沒有哪個程序是剛

剛結束的程序的子程序,如果有就由init來接管他,成為他的父程序。

危害?如果父程序不呼叫wait/waitpid,則子程序的保留資訊不會被釋放,造成核心資源的無法**,同時程序號會一直被占用,系統所能使用的程序號是

有限的,大量地產生殭屍程序將會導致系統不能產生新的程序。

怎麼避免殭屍程序?

防止的辦法是當父程序fork乙個子程序後,必須通過wait/waitpid等函式等待子程序結束,但這會導致父程序掛起,所以通常的做法是用signal函式為

sigchld安裝handler,在handler函式中呼叫wait/waitpid函式進行**。

什麼是殭屍程序和孤兒程序?怎麼避免殭屍程序

孤兒程序 父程序退出,子程序還在執行的這些子程序都是孤兒程序,孤兒程序將被 init 程序 進 程號為 1 所收養,並由 init 程序對它們完成狀態收集工作。殭屍程序 程序使用 fork 建立子程序,如果子程序退出,而父程序並沒有呼叫 wait 或 waitpid 獲 取子程序的狀態資訊,那麼子程...

什麼是殭屍程序和孤兒程序?怎麼避免殭屍程序?

孤兒程序 父程序退出,子程序還在執行的這些子程序都是孤兒程序,孤兒程序將被init 程序 程序號為1 所收養,並由init 程序對他們完成狀態收集工作。殭屍程序 程序使用fork 建立子程序,如果子程序退出,而父程序並沒有呼叫wait 獲waitpid 獲取子程序的狀態資訊,那麼子程序的程序描述符仍...

殭屍程序的危害及避免

由於子程序的結束和父程序的執行是乙個非同步的過程,所以父程序不知道子程序什麼時候結束,這可能導致當子程序結束時父程序太忙而丟失子程序結束時的狀態資訊。於是,unix提供了一種機制保證了只要父程序想要看到子程序結束的資訊,就能看到。這種機制就是 在每個程序退出時,核心釋放所有資源,但扔然保留一定的資訊...