1. 程式人生 > >pythonNet 04多進程

pythonNet 04多進程

ppi net pcb size 指定 資源 定義 相關 阻塞

fork註意:
*進入阻塞態的進程一定會讓出cpu時間片
*各個進程在自己空間內對數據的操作不影響其他進程
*父進程在執行fork之前開辟的空間子進程也會復制

進程相關函數

os.getpid()
功能獲取當前進程的PID號
返回值:返回當前進程的PID

os.getppid()
功能;獲取父進程的PID號
返回值:返回父進程PID

os._exit(status)
功能:退出程序
參數:整數 表示自定義的進程退出狀態標識

sys.exit([status])
功能:退出進程
參數:整數 表示退出狀態 默認為0
傳一個字符串,則退出時會打印該字符串


孤兒進程和僵屍進程

孤兒進程;父進程先於子進程退出,則子進程成為孤兒進程

*孤兒進程會被系統進程收養,此時系統進程就好成為該進程父進程

僵屍進程:子進程先於父進程退出,父進程沒有處理子進程退出狀態,此時子進程就會成為僵屍進程

*僵屍進程雖然結束但是會存留部分PCB在內存,大量的僵屍進程會占用內存資源


如何避免僵屍進程產生
*處理自己成退出狀態
pid,status =os.wait()
功能;在父進程中阻塞等待子進程退出
返回值:pid 退出的子進程的PID
status 子進程退出狀態


pid,status =os.waitpid(pid,option)
功能;在父進程中等待子進程退出
參數:pid -1 表示等待任意子進程


 >0 表示等待指定PID的子進程退出
option 0表示阻塞等待
WNOHANG 表示非阻塞
返回值:pid 退出的子進程的PID
status 子進程的退出狀態

創建二級子進程
1.父進程創建子進程等待子進程退出
2.子進程創建二級子進程然後退出
3.二級子進程成為孤兒,和原來父進程各自執行任務

pythonNet 04多進程