進程結束方式
在Unix環境中,有8中方式可以結束一個進程,通常用的是以下五種方式:
1:從main函數返回
2:調用exit函數(會關閉資料流,進行一些處理後再調用核心功能)
3:調用_exit函數或者是_Exit函數(直接調用核心功能)
4:從最後一個線程中返回
5:從最後一個線程中調用pthread_exit
還有三種非正常的結束方式:
6:調用abort
7:接收到訊號
8:應答最後一個線程的取消請求
後三種結束方式和線程有關,以後再討論。
函數名: atexit
功 能: 註冊終止函數很多時候我們需要在程式退出的時候做一些諸如釋放資源的操作,但程式退出的方式有很多種,比如main()函數運行結束、在程式的某個地方用exit() 結束程式、使用者通過Ctrl+C或Ctrl+break操作來終止程式等等,因此需要有一種與程式退出方式無關的方法來進行程式退出時的必要處理。方法就 是用atexit()函數來註冊程式正常終止時要被調用的函數。
用 法: int atexit(atexit_t func);
注意:atexit()註冊的函數類型應為不接受任何參數的void函數。
atexit()函數的參數是一個函數指標,函數指標指向一個沒有參數也沒有傳回值的函數。atexit()的函數原型是:int atexit (void (*)(void));
在一個程式中最多可以用atexit()註冊32個處理函數,這些處理函數的調用順序與其註冊的順序相反,也即最先註冊的最後調用,最後註冊的最先調用。
程式例:
#include<stdio.h>
#include<stdlib.h>
voidexit_fn1(void)
{
printf("Exit function #1called\n");
}
voidexit_fn2(void)
{
printf("Exit function #2called\n");
}
intmain(void)
{
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
}