2011-03-27 213 views

回答

2

返回代碼應用程序的退出代碼將在shell變量$?。如果您的應用程序崩潰,即操作系統決定它做了一些不好的事情,並導致它終止(發送一個信號),那麼這反映在退出狀態$?

下面是一個簡單的功能,我使用(在bash我將其設置爲可變PROMPT_COMMAND)把做的退出狀態

check_exit_status() 
{ 
    local status="$?"; 
    local msg=""; 
    local signal=""; 
    if [ ${status} -ne 0 ]; then 
     if [ $((${status} < 128)) -ne 0 ]; then 
      msg="exit (${status})"; 
     else 
      signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)"; 
      if [ "$signal" ]; then 
       msg="kill -$signal$msg"; 
      fi; 
     fi; 
     echo "[${status} => ${msg}]" 1>&2; 
    fi; 
    return 0 
} 

希望你覺得它有用一些解碼。

1

除0以外的任何值都表示發生錯誤。錯誤值範圍從1-255。用$?檢查它們。

這有一些例外,但成功爲0是* nix上的事實標準。

2

正常情況下,返回代碼爲0時,沒有任何錯誤。您可以檢查與$?

 
    [email protected]:~$ badCommand 
    badCommand: command not found 
    [email protected]:~$ 
    [email protected]:~$ echo $? 
    127 
    [email protected]:~$ 
    [email protected]:~$ whoami 
    fab 
    [email protected]:~$ 
    [email protected]:~$ echo $? 
    0 
    [email protected]:~$ 
+0

不錯的例子。感謝您宣傳超級簡單的示例/測試。根據OP的問題,實際崩潰的應用程序是否會很好地返回非零退出代碼?或者當你看到一個sig-fault或其他致命錯誤時返回錯誤代碼,或者你是否需要監視std-err輸出是否存在'sig-falut'等錯誤消息?有人知道嗎? – shellter 2011-03-27 18:51:28

0

似乎this is an answer你的問題。這裏的代碼片段表明答案取決於操作系統(包括Windows)。

+0

該博客已對公衆開放:「此博客僅面向受邀讀者開放http://meta-coding.blogspot.com/看起來您並未被邀請閱讀此博客。如果您認爲這是一個錯誤,您可能需要聯繫博客作者並請求邀請。「:-( – Pedro 2017-04-25 14:58:39