進程退出碼$?


目錄

 

description:

如何查看進程退出碼:

分析退出碼:

a.正常退出:

b.異常退出 

對異常的進程退出碼進行分析:

 關於信號的具體分析:



description:

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 $?

 

分析退出碼:

a.正常退出:

           echo $? 回顯0,進程正常退出.

b.異常退出 

           echo $? 回顯非0,進程異常退出.

對異常的進程退出碼進行分析:

Status

Status用於獲取子進程的退出狀態,雖然給我們的參數類型,他好像是int 整型,但是實際上它可不是單純的整
形。 
Status有4個字節存儲,實際上它只用了底16位,及低位的兩個資金存儲退出信息。 
當正常退出時:底16位中的較高的8位存儲退出狀態,底8位全部爲0。這裏高八位存儲的退出碼,必須運行完畢正
常退出纔會有 

 

當被信號終止退出時:如被kill結束時高8位空閒不用,從0位開始數的第7位中存儲標誌退出的退出碼,底7位存儲終止信號值。 

 

 

 

 關於信號的具體分析:

信號和退出碼的關係簡介

 

 資料來源網絡整理:

href:

https://blog.csdn.net/halfclear/article/details/72783900
https://blog.csdn.net/weixin_40921797/article/details/82018087
https://www.cnblogs.com/xiaojianliu/p/8473083.html
如有侵權,聯繫刪除

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章