產生條件:
父程序先於子程序退出,此時子程序就會成為孤兒程序
特徵:產生條件
子程序先於父程序退出,父程序沒有處理子程序的退出狀態,此時子程序就會成為殭屍程序
特徵:*殭屍程序會滯留部分pcb資訊在記憶體中,大量的殭屍程序會消耗系統資源,應該盡量避免殭屍程序的產生
pid,status = os.waitpid(pid,option)
功能:處理子程序的退出狀態
引數:pid -1 表示等待任意子程序退出
>0 表示等待對應pid號的子程序退出
option: 0 表示阻塞等待
os.wnohhng 表示非阻塞
返回值:同wait()
waitpid(-1,0) == wait() #這樣傳是一樣的
示例:
# waitpid.py
import os
from time import sleep
pid = os.fork(
)if pid <0:
print
('create process failed'
)elif pid ==0:
sleep(3)
print
('child process over'
) os._exit(3)
else
:while
true
: sleep(1)
# 設定非阻塞狀態,迴圈處理檢視子程序的狀態
pid,status = os.waitpid(-1
,os.wnohang)
print
('*****************'
)print
(pid,status)
print
(os.wexitstatus(status)
)# 以上是獲取退出狀態
while1:
pass
建立二級子程序:
1.父程序建立子程序後,等待子程序的退出
2.子程序建立二級子程序後馬上退出
3.二級子程序成為孤兒,處理具體事件
示例:
# 建立二級子程序防止殭屍程序
import os
from time import sleep
deffun1()
: sleep(3)
print
('第一件事情'
)def
fun2()
: sleep(4)
print
('第二件事情'
)pid = os.fork(
)if pid <0:
print
('create process faild'
)elif pid ==0:
# 建立二級子程序
pid0 = os.fork(
)if pid0 <0:
print
('crate pid0 failed'
)elif pid0 ==0:
fun2(
)# 用二級子程序做第二件事情
else
:# 一級子程序退出,使二級子程序成為孤兒
os._exit(0)
# 這是原來的一級子程序
else
:# 等待一級子程序退出
os.wait(
) fun1(
)# 做第一件事情,父程序該做的事
孤兒程序 殭屍程序
殭屍程序和孤兒程序 殭屍程序 殭屍程序是乙個比較特殊的狀態,當程序退出並且父程序沒有讀取到子程序的退出碼,就會產生殭屍程序,殭屍程序會一直儲存在程序表中,並且一直等待父程序讀取退出狀態碼。所以,只要子程序退出,父程序還在執行,但是父程序沒有讀取到子程序的狀態,子程序就會進入殭屍狀態。建立乙個殭屍程序...
殭屍程序, 孤兒程序
一,定義 當程序退出並且父程序 使用wait 系統呼叫 沒有讀取到子程序退出的返回 時就會產生殭屍程序。殭屍程序會以終止狀態保持在程序表中,並且會一直在等待父程序讀取退出狀態 簡單來說就是,在父程序中有乙個子程序,該子程序完成父程序交給的任務,子程序完成後會給父程序乙個任務結果返回,但父程序一直沒有...
殭屍程序 孤兒程序
程序在之前分為3個狀態 1.執行狀態 running 正在cpu中執行的程序。2.就緒狀態 ready 已獲得除了處理器外的所需資源,隨時準備著執行的程序。3.阻塞狀態 blocked 因為缺少除了cpu外的其他資源,無法滿足執行條件的程序。殭屍程序 乙個程序使用fork建立子程序,如果子程序退出,...