Linux之程序終止
Linux中程序退出分為正常退出和異常退出
1.正常退出
(1)在main()函式中執行return
(2)呼叫exit()函式
(3)呼叫_exit()函式
2.異常退出
(1)呼叫about()函式
(2)程序收到某個訊號,而該訊號使程序終止
對比
(1)exit與return
exit:一個函式,有引數。exit執行完後把控制權交給系統
return:函式執行完後的返回。return執行完後把控制權交給呼叫函式
(2)exit與about
exit:正常終止程序
about:異常終止程序
(3)exit與_exit
相同:都是用來終止程序的。當程式執行到exit或者_exit時,系統無條件的停止剩下的所有操作,清楚包括PCB在內的各種資料結構,並終止本程序的執行
exit中的引數exit_code為0代表程序正常終止,若為其他值表示程式執行過程中有錯誤發生
異同:exit()函式的標頭檔案——>stdlib.h
_exit()函式的標頭檔案——>unistd.h
_exit()在執行後立即返回給核心,而exit()要先執行一些清除工作,然後把控制權交給核心
呼叫_exit()函式時,會關閉程序所有的檔案描述符,清理記憶體及其他一些核心清理函式,但不會重新整理流(stdin,stdout,stderr等)
exit()函式是在_exit()函式之上的一個封裝,它會呼叫_exit()函式,並在呼叫之前重新整理流
eg:
exit.c
Makefile
執行結果:
_exit.c
Makefile
執行結果
printf()函式是使用緩衝I/O的方式,該函式在遇到"\n"換行符時自動從緩衝區中將記錄讀出。所以,exit()將緩衝區的資料寫完後才退出,而_exit()函式直接退出
若把_exit.c中“This is the content in buffer ”改為"This is the content in buffer \n",
則結果為
若把"using _exit\n"改為"using _exit",
則結果為