在模擬實現之前,我們首先要理解什麼是阻塞狀態?
作業系統將不滿足某種條件的程序從執行佇列中拿出,將其狀態設定為其他狀態並放入等待佇列中,在此等待佇列中的程序的都處於阻塞狀態。
1、殭屍程序,造成記憶體洩漏
2、父程序得管理子程序,所以父程序派給子程序的任務完成的如何,我們都需要知道,如,子程序執行完成,執行結果對還是不對,或者是否正常退出
3、父程序通過程序等待的方式,**子程序資源,獲取子程序退出資訊
#include #include #include #include #include int main()
else if(pid == 0)
else
else
}return 0;
}
輸出結果:
子程序未退出之前,父程序啥都不幹,一直在等待,5秒後子程序退出,才提取出退出碼。
#include #include #include #include #include int main()
else if(pid == 0)
else
sleep(1);
}while(ret == 0);
if(wifexited(status) && ret == pid)
else
}return 0;
}
輸出結果:
子程序沒有退出,父程序每隔1秒去檢測一次,若沒有檢測到已退出的子程序,就立即退出。
wait 函式父程序等待子程序退出
include include pid t wait int status pid t waitpid pid t pid,int status,int options include include pid t wait int status pid t waitpid pid t pid,int...
父程序等待子程序的非同步版本
前言但是,一味的建立程序,而不對程序進行合理的管理,必然會造成作業系統的冗餘,長時間下來,因為無用程序過多,系統將會崩潰。因為每個程序需要對自己維護乙個pcb的結構體,來描述乙個程序所有可能用到的資源 標誌 所以,這個結構體並不小,且每個程序都自己私有乙個,所以對無用程序的pcb管理是很有必要的。作...
父程序退出,保證子程序交由init。
最近寫 遇到父程序fork出的子程序,父程序退出後子程序也退出。而要求的實現機制是,父程序啟動子程序後,保證子程序能夠繼續執行,可以保證另乙個程序啟動能夠和這個子程序進行通訊操作。2 sigint 程式終止 interrupt 訊號,在使用者鍵入intr字元 通常是ctrl c 時發出 因為父程序收...