单声道返回代码249意味着什么?

时间:2015-07-09 21:45:28

标签: linux bash shell mono libc

我正在使用mono,我的可执行文件正常退出。

但是在执行后执行echo $?,我得到249。

我找不到单声道返回码列表,有找个地方吗?

2 个答案:

答案 0 :(得分:2)

我相信您的应用程序会以-7错误代码退出。该数字为负数,因为libc将减号附加到内核系统调用返回的所有错误代码(positive整数)。最后,bash-7转换为249$?

test.sh

#!/bin/bash
exit -7

致电test.sh

bash test.sh
$?
249

答案 1 :(得分:1)

单声道返回代码:

对于void type

的主要入口点,

0或-1(在posix中为255)

  • 注意:如果Main的返回类型为void,则仅在抛出未处理的异常时设置exitcode

int type

的主要入口点的任何int值
  • 由于历史退出代码(低8位)和状态(高8位),Posix / Bash会将其设置为0-255(除非您运行的是posix 2001系统; - )
  • 可以通过exec'ing(system / fork / spawn / etc ...)来获取完整的int值。

同样,对于基于异常的退出,-1是'保留'...

基于具有标准MONO_TYPE_I4(0x08)返回签名的入口点:

        MonoObject *res;
        res = mono_runtime_invoke (method, NULL, pa, exc);
        if (!exc || !*exc)
                rval = *(guint32 *)((char *)res + sizeof (MonoObject));
        else
                rval = -1;
        mono_environment_exitcode_set (rval);

假设您没有运行程序并更正为调试器且未自行设置退出代码,则退出代码为249 / -7表示非标准退出,并且基于有限的退出点和可以退出代码的区域,我会寻找一个你没有清理的线程(即托管线程在OS-X上成为'本地'pthread或在Linux上成为__thread或......)或其他一些管理线程本机/互操作进程挂起(GPU,文件系统操作等)。

您始终可以运行应用程序“MONO_LOG_LEVEL = debug mono someapp.exe”并在关机/退出跟踪中查找。