linux進程的啓動和終止

1. 進程正常終止的5種方式:
1)main函數返回
2)進程調用exit:進入內核前先進行一些清理工作,如調用各種終止程序(這些終止處理程序可以由atexit註冊),關閉標準I/O流等
3)進程調用_exit/_Exit:立即進入內核
注:exit和_Exit由ISO C說明,_exit由POSIX.1說明
4)最後一個線程從其啓動例程返回
5)最後一個線程調用pthread_exit

2. 進程異常終止的3種方式
1)進程調用abort
2)接收信號,如SIGTERM/SIGKILL等,並終止
3)最後一個線程對取消請求做出響應

3.有用的atexit
#include <stdlib.h>
int atexit(void (*func)(void));
atexit註冊終止處理函數,ISO C要求系統支持的終止處理函數的個數至少爲32個。
被註冊的終止處理函數沒有參數和返回值,它們在進程終止前被調用,調用順序與註冊順序相反,如果一個函數被註冊多次,則該函數也會被執行多次。

4.C程序的啓動和終止
其基本流程是內核調用exec,導致C啓動例程的調用,該例程會去調用main函數,main函數返回(如return)之後,C啓動例程立即調用exit函數,exit函數然後調用終止處理程序並清理標準I/O之後回到內核。
linux進程的啓動和終止

5.如果一個進程已終止,但其父進程未對其做一些清理工作,則該進程被稱爲僵死(zombie)進程,zombie進程將一直等待父進程的處理(如捕獲SIGCHLD信號並調用wait獲取終止狀態、做清理工作等)。而如果一個進程終止時,其父進程在此之前已經終止,則該進程將被init進程收養,成爲init進程的子進程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章