Linux下程序退出的幾種形式

2021-09-14 03:38:37 字數 2129 閱讀 3885

閱讀目錄

回到目錄

linux 下程序的退出分為正常退出和異常退出兩種:

1.正常退出

a. 在main()函式中執行return 。

b.呼叫exit()函式

c.呼叫_exit()函式 

2.異常退出

a.呼叫about函式

b.程序收到某個訊號,而該訊號使程式終止。 

不管是哪種退出方式,系統最終都會執行核心中的同一**。這段**用來關閉程序所用已開啟的檔案描述符,釋放它所占用的記憶體和其他資源。 

回到目錄

1.exit和return 的區別:

exit是乙個函式,有引數。exit執行完後把控制權交給系統

return是函式執行完後的返回。renturn執行完後把控制權交給呼叫函式。

2.exit和abort的區別:

exit是正常終止程序

about是異常終止。 

回到目錄

exit和_exit函式都是用來終止程序的。當程式執行到exit或_exit時,系統無條件的停止剩下所有操作,清除各種資料結構,並終止本程序的執行。

exit在標頭檔案stdlib.h中宣告,而_exit()宣告在標頭檔案unistd.h中宣告。 exit中的引數exit_code為0代表程序正常終止,若為其他值表示程式執行過程中有錯誤發生。 

_exit()執行後立即返回給核心,而exit()要先執行一些清除操作,然後將控制權交給核心。

呼叫_exit函式時,其會關閉程序所有的檔案描述符,清理記憶體以及其他一些核心清理函式,但不會重新整理流(stdin, stdout, stderr ...). exit函式是在_exit函式之上的乙個封裝,其會呼叫_exit,並在呼叫之前先重新整理流。

exit()函式與_exit()函式最大區別就在於exit()函式在呼叫exit系統之前要檢查檔案的開啟情況,把檔案緩衝區的內容寫回檔案。由於linux的標準函式庫中,有一種被稱作「緩衝i/o」的操作,其特徵就是對應每乙個開啟的檔案,在記憶體中都有一片緩衝區。每次讀檔案時,會連續的讀出若干條記錄,這樣在下次讀檔案時就可以直接從記憶體的緩衝區讀取;同樣,每次寫檔案的時候也僅僅是寫入記憶體的緩衝區,等滿足了一定的條件(如達到了一定數量或遇到特定字元等),再將緩衝區中的內容一次性寫入檔案。這種技術大大增加了檔案讀寫的速度,但也給程式設計代來了一點兒麻煩。比如有一些資料,認為已經寫入了檔案,實際上因為沒有滿足特定的條件,它們還只是儲存在緩衝區內,這時用_exit()函式直接將程序關閉,緩衝區的資料就會丟失。因此,要想保證資料的完整性,就一定要使用exit()函式。

通過乙個函式例項來看看它們之間的區別: 

函式例項1 : exit.c 

#include#includeint main()

執行結果為:

using exit----

this is the content in buffer 

函式例項2:_exit.c 

#include#includeint main()

執行結果為 : 

using _exit-- 

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

大家也可以把函式例項2中的printf("this is the content in buffer");改為printf("this is the content in buffer\n")(即在printf中最後加乙個\n看執行結果是什麼,為什麼會產生這樣的結果呢?) 

1.父程序先於子程序終止:

此種情況就是我們前面所用的孤兒程序。當父程序先退出時,系統會讓init程序接管子程序 。

2.子程序先於父程序終止,而父程序又沒有呼叫wait函式

此種情況子程序進入僵死狀態,並且會一直保持下去直到系統重啟。子程序處於僵死狀態時,核心只儲存程序的一些必要資訊以備父程序所需。此時子程序始終占有著資源,同時也減少了系統可以建立的最大程序數。 

什麼是 僵死狀態呢? 

乙個已經終止、但是其父程序尚未對其進行善後處理(獲取終止子程序的有關資訊,釋放它仍占有的資源)的程序被稱為僵死程序(zombie)。

3.子程序先於父程序終止,而父程序呼叫了wait函式

此時父程序會等待子程序結束。

Linux下程序的退出

注意,本文說的是整個程序 乙個程序可能包含多個執行緒 的退出。乙個程序的退出,有可能是由程序自己的使用者態 主動退出的,也可能是由核心通過訊號處理機制 如sigkill sigabrt 強制執行的。一 使用者態主動退出 有如下多種途徑,直接main函式返回,呼叫exit 呼叫 exit 呼叫exit...

Linux程序 程序的退出

linux程序 程序的退出 2011 12 27 20 44 56 分類 linux void exit int status 注意點 1.status表明了程序終止時的狀態。當子程序使用 exit 後,父程序如果在用wait 等待子程序,那麼wait 將會返回status狀態,注意只有status...

Linux程序退出

在linux下,程序退出就表示程序即將結束了 為什麼是即將,這是因為linux設計的是父程序給子程序收屍 正常退出包括3種情形。main函式中執行return 0 呼叫exit函式,函式原型 void exit int status 呼叫 exit函式,函式原型 void exit int stat...