-殭屍狀態是乙個比較特殊的狀態。當程序退出並且父程序(使用wait()系統呼叫)沒有讀取到子程序退出的返回**時就會產生殭屍程序。
-殭屍程序會終止狀態保持在程序表中,並且會一直在等待父程序讀取退出狀態**。
-所以,只要子程序退出,父程序還在執行,但父程序沒有讀取子程序狀態,子程序進入z狀態。
從上圖我們可以看出,10秒之後子程序退出,進入z狀態,子程序成為殭屍程序
1.程序的退出狀態必須維持下去,可父程序如果一直不讀取,那麼子程序一直處於z狀態。
2.維持退出狀態本身就是要用資料維護,也屬於程序基本資訊,所以儲存在task_struct(pcb)中,換句話說,z狀態一直不退出,pcb要一直維護。
3.父程序建立很多子程序,不**,就會造成記憶體資源的浪費。
4.記憶體洩漏。
-父程序如果提前退出,那麼子程序後退出,進入z之後,子程序就被稱為孤兒程序。
-孤兒程序被1號init程序領養,當然要有init程序 **。
從圖中我們可以看出父程序退出之後,子程序被1號收養,父id為1.
模擬實現殭屍程序, 孤兒程序
在linux下程序有多種狀態以下就是我列舉的一些狀態 r執行狀態 running 並不意味著程序一定在執行中,它表明程序要麼在執行中要麼在執行佇列裡。s睡眠狀態 sleeping 意味著程序在等待事件的完成 這裡的睡眠有時候也會叫可中斷睡眠 interruptible sleep d磁碟休眠狀態 d...
模擬實現殭屍程序和孤兒程序
殭屍程序 乙個子程序在其父程序沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。程序在終止時,系統會 所有核心分配給它的記憶體 關閉它開啟的所有檔案等等,但還會保留一些極少的資訊,因為 程序終止後有些資訊對於父程序和核心還是很有用的,例如程序的id號 程序的退出狀態 程序執行...
模擬實現殭屍程序和孤兒程序
首先我們來先了解一下什麼是殭屍程序和孤兒程序?當你建立了子程序後,讓父子程序幹不同的事,如果,子程序先完成事情要退出時,然後它就會等 人 來讀取它的退出狀態資訊 也就是他的父程序 這個時候,子程序就需要一直維持這這個狀態,這個狀態就是殭屍狀態 我們也稱為z狀態 也就是說,當乙個子程序退出時,他的父程...