在linux裏面的進程終止的方法有8種。
五種正常終止:
- 從main函數返回
- 調用exit函數
- 調用_exit或者_Exit
- 最後一個線程從啓動實例返回
- 從最後一個線程調用pthread_exit
三種議程終止:
- 調用abort函數
- 接收到一個終止信號
最後一個線程對取消請求做出響應
exit的調用過程
函數原型:void exit(int status);
在調用一個函數結束程序的時候,_exit()或者_Exit()會立即進入內核,而exit函數則會先執行一些清理處理,然後返回內核。
關於進程:
一個已經終止、但是其父進程尚未對其進行善後處理(獲取終止子進程的有關信息、釋放它仍佔用的資源)的進程被稱爲僵死進程,也就是處於TASK_ZOMIBE狀態的進程。
TASK_ZOMIBE狀態是進程結束前過渡狀態(僵死狀態),在一個進程調用了exit()之後,該進程並不會立刻完全消失,而是留下一個稱爲殭屍進程(Zombie)的數據結構 。
殭屍進程是一種非常特殊的進程,它已經釋放了幾乎所有的內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態等信息供其他進程收集,除此之外,殭屍進程不再佔有任何內存空間。