exit()函數詳解與Exit() 和 Return() 的區別

來源:互聯網
上載者:User
exit(0) 表示程式正常, exit(1)/exit(-1)表示程式異常退出

exit() 結束當前進程/當前程式/,在整個程式中,只要調用 exit ,就結束return() 是當前函數返回,當然如果是在主函數main, 自然也就結束當前進程了,如果不是,那就是退回上一層調用。在多個進程時.如果有時要檢測上進程是否正常退出的.就要用到上個進程的傳回值..exit(1)表示進程正常退出. 返回 1;exit(0)表示進程非正常退出. 返回 0.

進程環境與進程式控制制(1): 進程的開始與終止1. 進程的開始:

C程式是從main函數開始執行, 原型如下:
int main(int argc, char *argv[]);
通常main的傳回值是int型, 正確返回0. 

如果main的傳回值為void或者無, 某些編譯器會給出警告, 此時main的傳回值通常是0.關於main的命令列參數不做過多解釋, 以下面的程式展示一下:

#include <stdio.h>int main(int argc, char *argv[])

{

     int i;

     for (i = 0; i < argc; i++)

         printf("argv[%d]: %s\n", i, argv[i]);

     return 0;

}
2. 進程終止:

C程式的終止分為兩種: 正常終止和異常終止.

正常終止分為: return, exit, _exit, _Exit, pthreade_exit

異常中指分為: abort, SIGNAL, 線程響應取消

主要說一下正常終止的前4種, 即exit系列函數.
#include <stdlib.h>    /* ISO C */

void exit(int status);

void _Exit(int status);

#include <unistd.h>    /* POSIX */

void _exit(int status);

以上3個函數的區別是:

exit()(或return 0)會調用終止處理常式和使用者空間的標準I/O清理程式(如fclose), _exit和_Exit不調用而直接由核心接管進行清理.

因此, 在main函數中exit(0)等價於return 0.3. atexit終止處理常式:

ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被調用多次.

原型如下:
#include <stdlib.h>

int atexit(void (*func)(void));
其中參數是一個函數指標, 指向終止處理函數, 該函數無參無傳回值.以下面的程式為例:

#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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.