1. 程式人生 > >Linux之程序終止

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

wKiom1ePkYOTe72yAAAhfTRBSXg148.png

Makefile

wKioL1ePkaSD0VKEAAAUu7gsbMs552.png

執行結果:

wKioL1ePkcDy120yAAAuP0h0Gg4867.png

_exit.c

wKiom1ePkeKxD5CVAAAhTqWCUaM061.png

Makefile

wKioL1ePkf_gKmyjAAAVcGozFIw017.png

執行結果

wKiom1ePkhuRaIjHAAApBG9Njv0094.png

printf()函式是使用緩衝I/O的方式,該函式在遇到"\n"換行符時自動從緩衝區中將記錄讀出。所以,exit()將緩衝區的資料寫完後才退出,而_exit()函式直接退出

若把_exit.c中“This is the content in buffer ”改為"This is the content in buffer \n",

wKioL1ePkjThBaXaAAAhm3VqAM4245.png

則結果為

wKioL1ePklvziqT1AAAWRP0sf2M139.png

若把"using _exit\n"改為"using _exit",

wKiom1ePknWR9EV0AAAghUYL49I701.png

則結果為

wKiom1ePkoyRAeMSAAAXtjrAYTY296.png