linux 进程开始与终止
exit(0) 表示程序正常退出;
exit(1)/exit(-1) 表示程序異常退出;
exit() 結束當前進程/當前程序/,在整個程序中,只要被調用就結束,返回參數值;
return() 是當前函數返回,當然如果是在主函數main, 自然也就結束當前進程了,如果不是,那就是退回上一層調用。在多個進程時.如果有時要檢測上進程是否正常退出的.就要用到上個進程的返回值.
進程開始:
C程序是從main函數開始執行, 原型如下:
int main(int argc, char *argv[]);
進程終止:
C程序的終止分為兩種: 正常終止和異常終止.
正常終止分為: return, exit, _exit, _Exit, pthreade_exit
異常終止分為: abort, SIGNAL, 線程響應取消
主要說一下正常終止的前4種, 即exit系列函數.
#include <stdlib.h> void exit(int status); void _Exit(int status); #include <unistd.h> void _exit(int status);以上3個函數的區別是:
exit()(或return 0)會調用終止處理程序和用戶空間的標準I/O清理程序(如fclose), _exit和_Exit不調用而直接由內核接管進行清理.因此, 在main函數中exit(0)等價于return 0.
atexit終止處理程序:
ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被調用多次.
原型如下:
其中參數是一個函數指針, 指向終止處理函數, 該函數無參無返回值.
以下面的程序為例:
#include <stdlib.h>static void myexit1() {printf("first exit handler\n"); }static void myexit2() {printf("second exit handler\n"); }int main() {if (atexit(my_exit2) != 0)printf("can't register my_exit2\n");if (atexit(my_exit1) != 0)printf("can't register my_exit1\n");if (atexit(my_exit1) != 0)printf("can't register my_exit1\n");printf("main is done\n");return 0; }運行結果: $ ./a.out main is done first exit handler first exit handler second exit handler運行結果: $./a.out arg1 arg2 arg3 argv[0]: ./a.out argv[1]: arg1 argv[2]: arg2 argv[3]: arg3總結
以上是生活随笔為你收集整理的linux 进程开始与终止的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: network 节点label以及相关字
- 下一篇: ZT:CSS实现水平|垂直居中漫谈