兩次fork防止殭屍程序

2021-06-20 17:58:45 字數 763 閱讀 9824

1、何謂殭屍程序?

在linux系統中,乙個已經終止但父程序尚未對其進行善後處理(釋放子程序相關資訊占用的資源)的子程序叫做殭屍程序 。子程序結束時,父程序呼叫pid_t wait(int *statloc)或者pid_t waitpid(pid_t pid,int *statloc,int options)獲取核心中為子程序儲存的資訊(程序id,終止狀態)。

2、殭屍程序避免分析

建立程序時,子程序的終止狀態要返回給父程序,但呼叫fork函式時候,若父程序比子程序提前結束,則由init程序領養:在乙個程序終止時候,核心逐個 檢查所有活動程序,判斷它是否是被終止程序的子程序,如果是,則將該程序父程序的id更改為1,這樣,每個程序都有父程序,init 程序只要檢測有子程序終止就會呼叫wait或waitpid釋放資源,防止殭屍程序。

3、解決辦法:呼叫兩次fork避免殭屍程序

#include "apue.h"

#include int main(void)

else if (pid == 0) // 第乙個子程序

if (waitpid(pid, null, 0) != pid) //等待第乙個子程序

err_sys("waitpid error");

printf("i am the parents of your parents/n");

//這裡是繼續執行原始父程序(第乙個父程序),且知道不是第二個子程序的父程序

exit(0); //第乙個父程序終止

}

fork兩次解決殭屍程序

孤兒程序 孤兒程序是指父程序在子程序結束之前死亡 return 或exit 如下圖1所示 圖1 孤兒程序 但是孤兒程序並不會像上面畫的那樣持續很長時間,當系統發現孤兒程序時,init程序就收養孤兒程序,成為它的父親,child程序exit後的資源 就都由init程序來完成。殭屍程序 殭屍程序是指子程...

為何要fork 兩次來避免產生殭屍程序?

當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid 子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭...

為何要fork 兩次來避免產生殭屍程序?

當我們只fork 一次後,存在父程序和子程序。這時有兩種方法來避免產生殭屍程序 目前先考慮子程序先於父程序結束的情況 由此,可以看出父程序與子程序有父子關係,除非保證父程序先於子程序結束或者保證父程序在子程序結束前執行waitpid 子程序均有機會成為殭屍程序。那麼如何使父程序更方便地建立不會成為殭...