2011-03-27 110 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