#include int main(void)
編譯好,然後執行,然後在shell裡面檢視程序退出碼,鍵入:echo $?,我們發現拿到的程序退出碼是255。
我們返回的明明是-1,為什麼拿到的卻是255呢?還得從程序的狀態碼開始講起,我們知道,當乙個程序退出的時候,父程序一般都會進行收尾工作,就是呼叫wait或者waitpid獲取程序的狀態碼,就是status code,我們從這兩個系統呼叫的函式原型就可以看出:
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
status指標可以傳出拿到的狀態碼資訊,但是狀態碼不等於退出碼,就是說status code ≠ exit code,我們先來看狀態碼的構成:
+-----------------+
|exit
|signal
|+-----------------+
most machines actually store the 16-bit value in a 32-bit integer, and that is handled with unsigned arithmetic.
就是說程序退出時候的狀態碼是16位,高八位儲存退出碼,低八位儲存導致程序退出的訊號標誌位,那麼現在既然知道了狀態碼的構成,取出程式的退出碼就不難了,不過這個不用我們自己寫**,linux已經提供了相應的巨集:wexitstatus,這個巨集用來從狀態碼中取出退出碼。
回到我們的話題,為什麼返回的是255的問題,-1對應到八位二進位制那就是 1111 1111,全是1,把它作為無符號數,那就是255。為什麼不能把它當成有符號數呢?因為退出碼範圍0-255是posix 1003.1標準規範化了的,不能超出這個範圍。
總結:最好是不要用exit(-1)或者在main函式裡面返回-1,這個是很不好的習慣,可以使用巨集:exit_success表示成功,exit_failure表示失敗。
程序退出碼
目錄 description 如何檢視程序退出碼 分析退出碼 a.正常退出 b.異常退出 對異常的程序退出碼進行分析 關於訊號的具體分析 linux 下程序的退出分為正常退出和異常退出兩種 1.正常退出 a.在main 函式中執行return。b.呼叫exit 函式 c.呼叫 exit 函式 2.異...
Linux程序退出
在linux下,程序退出就表示程序即將結束了 為什麼是即將,這是因為linux設計的是父程序給子程序收屍 正常退出包括3種情形。main函式中執行return 0 呼叫exit函式,函式原型 void exit int status 呼叫 exit函式,函式原型 void exit int stat...
linux 退出狀態碼
在linux狀態中,每當命令執行完成後,系統都會返回乙個退出狀態。該退出狀態用乙個整數值表示,用於判斷命令執行的正確與否。最後一次執行命令的退出狀態值被儲存在內建變數 中,所以,可以通過echo語句測試命令是否執行成功。一般來講,退出狀態 0 表示正常執行,沒有遭遇任何問題。其他非零的狀態碼均表示失...