目錄
description:
如何檢視程序退出碼:
分析退出碼:
a.正常退出:
b.異常退出
對異常的程序退出碼進行分析:
關於訊號的具體分析:
linux 下程序的退出分為正常退出和異常退出兩種:
1.正常退出
a. 在main()函式中執行return。
b.呼叫exit()函式
c.呼叫_exit()函式
2.異常退出
a.呼叫abort函式
b.程序收到某個訊號,而該訊號使程式終止。
不管是哪種退出方式,系統最終都會執行核心中的同一**。這段**用來關閉程序所用已開啟的檔案描述符,
釋放它所占用的記憶體和其他資源。
簡述: exit是乙個函式,有引數。exit執行完後把控制權交給系統
return是函式執行完後的返回。return執行完後把控制權交給呼叫函式。
exit()和_exit()的區別:
_exit()執行後立即返回給核心,而exit()要先執行一些清除操作,然後將控制權交給核心。
呼叫_exit函式時,其會關閉程序所有的檔案描述符,清理記憶體以及其他一些核心清理函式,但不會重新整理流
(stdin, stdout, stderr ...). exit函式是在_exit函式之上的乙個封裝,其會呼叫_exit,並在呼叫之前
先重新整理流。
exit()函式與_exit()函式最大區別就在於exit()函式在呼叫exit系統之前要檢查檔案的開啟情況,把文
件緩衝區的內容寫回檔案。由於linux的標準函式庫中,有一種被稱作「緩衝i/o」的操作,其特徵就是對應每一
個開啟的檔案,在記憶體中都有一片緩衝區。每次讀檔案時,會連續的讀出若干條記錄,這樣在下次讀檔案時就可
以直接從記憶體的緩衝區讀取;同樣,每次寫檔案的時候也僅僅是寫入記憶體的緩衝區,等滿足了一定的條件(如達
到了一定數量或遇到特定字元等),再將緩衝區中的內容一次性寫入檔案。這種技術大大增加了檔案讀寫的速
度,但也給程式設計代來了一點兒麻煩。比如有一些資料,認為已經寫入了檔案,實際上因為沒有滿足特定的條件,
它們還只是儲存在緩衝區內,這時用_exit()函式直接將程序關閉,緩衝區的資料就會丟失。因此,要想保證數
據的完整性,就一定要使用exit()函式。
其次exit在標頭檔案stdlib.h中宣告,而_exit()宣告在標頭檔案unistd.h中宣告。 exit中的引數
exit_code為0代表程序正常終止,若為其他值表示程式執行過程中有錯誤發生。
echo $? 回顯0,程序正常退出.
echo $? 回顯非0,程序異常退出.
status
status用於獲取子程序的退出狀態,雖然給我們的引數型別,他好像是int 整型,但是實際上它可不是單純的整
形。 status有4個位元組儲存,實際上它只用了底16位,及低位的兩個資金儲存退出資訊。
當正常退出時:底16位中的較高的8位儲存退出狀態,底8位全部為0。這裡高八位儲存的退出碼,必須執行完畢正
常退出才會有
當被訊號終止退出時:如被kill結束時高8位空閒不用,從0位開始數的第7位中儲存標誌退出的退出碼,底7位儲存終止訊號值。
訊號和退出碼的關係簡介
href:
Linux程序退出碼
include int main void 編譯好,然後執行,然後在shell裡面檢視程序退出碼,鍵入 echo 我們發現拿到的程序退出碼是255。我們返回的明明是 1,為什麼拿到的卻是255呢?還得從程序的狀態碼開始講起,我們知道,當乙個程序退出的時候,父程序一般都會進行收尾工作,就是呼叫wait...
linux 退出狀態碼
在linux狀態中,每當命令執行完成後,系統都會返回乙個退出狀態。該退出狀態用乙個整數值表示,用於判斷命令執行的正確與否。最後一次執行命令的退出狀態值被儲存在內建變數 中,所以,可以通過echo語句測試命令是否執行成功。一般來講,退出狀態 0 表示正常執行,沒有遭遇任何問題。其他非零的狀態碼均表示失...
shell退出狀態碼
shell中執行的命令使用退出狀態碼 exit status 告訴shell它已經執行完畢。退出狀態碼是乙個0 255的整數值,在命令結束時傳給shell。可以捕獲這個值並在指令碼中使用。按照慣例,乙個成功結束的命令的退出狀態碼是0。如果乙個命令結束時有錯誤,退出狀態碼就是乙個正數值。狀態碼及描述 ...