C中退出代码11的含义?

时间:2015-06-28 18:24:59

标签: c segmentation-fault exit-code

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

其他答案错过了短语"退出代码"中可能存在的歧义。我怀疑你的意思是"退出代码"是使用/* assume a child process has already been created */ int status; wait(&status); printf("exit code %d\n", status); 系列调用函数检索的状态代码,如:

exit(11)

如果你这样做,你可能会看到"退出代码11"如果孩子处理段错误。如果子进程实际上调用printf,您可能会看到"退出代码2816"代替。

最好把这些东西称为“#34;等待代码&#34;或&#34;等待状态&#34;而不是&#34;退出代码&#34;,以避免与传递给退出的值混淆。等待代码包含多个信息,这些信息一起打包成一个整数。通常,您不应该直接查看整数(就像我在W*中所做的那样)。您应该使用<sys/wait.h>中的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 */ } 宏来获取详细信息。< / p>

-Wignored-attributes

答案 2 :(得分:0)

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

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

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