Unix-Linux 程式設計實踐教程 第八章 小結
阿新 • • 發佈:2018-11-25
- 執行程式的函式---execvp()
- 複製當前程式到新的程序空間---fork()。程序呼叫fork(),轉到核心,核心進行以下操作:
- 分配新的記憶體塊和核心資料結構
- 複製原來的程序到新的程序
- 向執行程序集新增新的程序
- 將控制權返回給兩個程序(在父程序中,fork()返回值不為0,在子程序中fork()返回值為0)
- 等待子程序結束函式---wait()。wait()實際上時阻塞地等待SIGCHILD訊號,如果設定了SIGCHILD處理函式,那麼會先執行處理函式,再wait()返回。
- exit()->呼叫由atexit()或on_exit()註冊的函式->_exit()。
- _exit()流程:
- 關閉所有檔案描述符和目錄描述符
- 將該程序的PID設定為init程序的PID
- 如果父程序呼叫wait,即通知父程序
- 向父程序傳送SIGCHILD
- 已經死亡卻沒有給exi()沒有賦值的程序叫做殭屍(zombie)程序