【问题标题】:Meaning of Exit Code 11 in C?C中退出代码11的含义?
【发布时间】:2015-09-15 04:23:23
【问题描述】:

C 中退出代码 11 的一般含义是什么?我环顾四周,找不到明确的答案,所以我想我会在这里问。当我尝试将元素添加到向量时,它就会出现。

【问题讨论】:

  • 您确定您的意思是“退出代码”,而不是 signal 11
  • 也许您正在混合退出代码和返回代码,甚至是 Kerrek 提到的信号。显示导致问题的源代码。
  • 哪个平台? Linux、Windows 还是一般的?
  • 对于segmentation fault,这真是一篇有用的排查文章:nsnam.org/wiki/…

标签: c segmentation-fault exit-code


【解决方案1】:

没有标准定义应用程序在某些情况下必须设置哪些退出代码。哪个退出代码代表哪个错误甚至成功完全取决于程序员!

有时程序员认为任何不为零的值都表示错误,有时该值等于操作系统错误代码。

在 Windows 退出代码 11 可能因为文件问题而被使用。如果您想要此错误代码的描述(特定于 Windows,不一定是您的应用程序),请运行 net helpmsg 11

【讨论】:

    【解决方案2】:

    您没有找到明确的答案,因为没有答案。由程序的作者决定他们希望使用哪些退出代码。标准 C 只说exit(0)exit(EXIT_SUCCESS) 表示程序成功,exit(EXIT_FAILURE) 表示某种错误。 (从main 返回一个值相当于用该值调用exit。)包括Windows、Linux、OSX 等在内的大多数常见操作系统使用0 表示成功,使用1 到255 之间的值表示错误;仍然在错误代码之间进行选择取决于应用程序编写者,值 11 没有什么特别的。

    在 Linux 和大多数其他 Unix 变体下,signal 数字 11 表示 segmentation fault,如 remarked by Kerrek SB。当程序进行某种无效的内存访问时,就会发生分段错误,因此它是越界访问数组、指针算术错误、尝试访问空指针或其他与指针相关的错误的合理结果。信号 11 与退出代码 11 不同:当程序因信号而死时,它被标记为已被信号杀死,而不是正常退出。 Unix shell 通过报告退出代码来报告信号,退出代码是信号编号加 128,因此 139 表示分段错误。

    【讨论】:

      【解决方案3】:

      其他答案遗漏了短语“退出代码”中可能存在的歧义。我怀疑您所说的“退出代码”是指使用wait 系列系统调用检索到的状态代码,如下所示:

      /* assume a child process has already been created */
      int status;
      wait(&status);
      printf("exit code %d\n", status);
      

      如果您执行类似的操作,如果子进程出现段错误,您可能会看到“退出代码 11”。如果子进程实际上调用了exit(11),您可能会看到“退出代码 2816”。

      最好将这些东西称为“等待代码”或“等待状态”而不是“退出代码”,以避免与传递给退出的值混淆。等待代码包含几条信息,它们一起打包成一个整数。通常,您不应该直接查看整数(就像我在上面的 printf 中所做的那样)。您应该改用来自<sys/wait.h>W* 宏来分析它。

      WIF* 宏开始了解发生了什么类型,然后使用该信息来决定使用哪些其他W* 宏来获取详细信息。

      if(WIFEXITED(status)) {
        /* The child process exited normally */
        printf("Exit value %d\n", WEXITSTATUS(status));
      } else if(WIFSIGNALED(status)) {
        /* The child process was killed by a signal. Note the use of strsignal
           to make the output human-readable. */
        printf("Killed by %s\n", strsignal(WTERMSIG(status)));
      } else {
        /* ... you might want to handle "stopped" or "continued" events here */
      }
      

      【讨论】:

        猜你喜欢
        • 2013-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多