mono returns 代码 249 是什么意思?

what does mono returns code 249 means?

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

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

我找不到单声道 return 代码的列表,有没有地方可以找到它?

我相信您的应用程序以 -7 error code. The number is negative because libc appends the minus sign to all error codes returned by the kernel syscalls (which are positive 整数退出)。最终,bash 通过 $?.

-7 转换为 249

test.sh

#!/bin/bash
exit -7

正在调用test.sh

bash test.sh
$?
249

单声道Return代码:

0 或 -1(posix 中的 255)用于 void 类型的主要入口点

  • 注意:如果 Main 的 return 类型为 void,-1 仅在抛出未处理的异常时设置退出代码

int 类型的 Main Entry 点的任何 int 值

    由于历史退出代码(低 8 位)和状态(高 8 位),
  • Posix/Bash 将把它装箱到 0-255(除非你是 运行宁 posix 2001 系统 ;-)
  • 可以通过执行 (system/fork/spawn/etc...)
  • 获得完整的 int 值

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

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

        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);

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

您始终可以 运行 您的应用程序 "MONO_LOG_LEVEL=debug mono someapp.exe" 并在 shutdown/exit 跟踪中查找。