孤兒程序 殭屍程序

2021-10-02 07:57:39 字數 1752 閱讀 4017

產生條件:

父程序先於子程序退出,此時子程序就會成為孤兒程序

特徵:產生條件

子程序先於父程序退出,父程序沒有處理子程序的退出狀態,此時子程序就會成為殭屍程序

特徵:*殭屍程序會滯留部分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建立子程序,如果子程序退出,...