_exit()和exit()主要區別是一個退出進程會清理I/O緩沖區,一個直接結束進程進入到內核中。
舉例說明:
1 #include <stdio.h> 2 3 4 /*demo01 程序只輸出 hello world*/ 5 /* 6 int main() 7 { 8 printf("hello world\n"); 9 printf("hello world"); 10 _exit(0); 11 } 12 */ 13 14 /*demo02 程序輸出 hello world 15 hello world */ 16 /* 17 int main() 18 { 19 printf("hello world\n"); 20 printf("hello world\n"); 21 _exit(0); 22 } 23 */ 24 25 /*demo03 程序只輸出 hello world*/ 26 /* 27 int main() 28 { 29 printf("hello world\n"); 30 printf("hello world"); 31 exit(0); 32 } 33 */ 34 35 /*demo04 程序輸出 hello world 36 hello world */ 37 /* 38 39 int main() 40 { 41 printf("hello world\n"); 42 printf("hello world\n"); 43 exit(0); 44 }
解釋:
printf函數就是使用的是緩沖I/O的方式,該函數在遇到“\n“換行符時自動的從緩沖區中將記錄讀出。所以exit()將緩沖區的數據寫完后才能退出來,所以調用exit()函數后程序並不會馬上退出,這就是有些出現的僵屍程序,而_exit是直接退出進入到內核中去。
return是語言級別的,它表示了調用堆棧的返回;而exit是系統調用級別的,它表示了一個進程的結束。
return是返回函數調用,如果返回的是main函數,則為退出程序。
exit是在調用處強行退出程序,運行一次程序就結束
exit(1)表示異常退出.這個1是返回給操作系統的不過在DOS好像不需要這個返回值。
exit(0)表示正常退出
無論寫在那里,都是程序退出,dos和windows中沒有什么不一樣,最多是系統處理的不一樣。
數字0,1,-1會被寫入環境變量ERRORLEVEL,其它程序可以由此判斷程序結束狀態。
一般0為正常退出,其它數字為異常,其對應的錯誤可以自己指定。
返回給操作系統的,0是正常退出,其他值是異常退出,在退出前可以給出一些提示信息,或在調試程序中察看出錯原因.
參考:https://blog.csdn.net/yyfwd/article/details/50548359