2015-06-28 61 views
7

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

+2

您确定自己的意思是“退出代码”,而不是*信号11 *? –

+1

也许你正在混合退出码和返回码,甚至Kerrek提到的信号。显示导致问题的源代码。 – Marged

+0

哪个平台? Linux,Windows还是一般? –

回答

0

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

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

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

3

您没有找到明确的答案,因为没有一个答案。由程序的作者决定他们希望使用哪些退出代码。标准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 */ 
}