退出代码11在C中的一般含义是什么?我环顾四周,找不到明确的答案,所以我想我应该在这里问一下。当我尝试将一个元素添加到一个向量中时,它就会出现。
发布于 2015-06-29 03:44:27
你没有找到一个明确的答案,因为没有一个。这是由程序的作者决定他们想要使用的退出代码。标准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 shells通过报告退出代码来报告信号,退出代码是信号号加上128,对于分段故障,则为139。
发布于 2015-06-29 05:05:16
其他答案遗漏了“退出代码”这一短语中可能存在的歧义。我怀疑您所说的“退出代码”是使用wait
系列系统调用检索到的状态代码,如下所示:
/* assume a child process has already been created */
int status;
wait(&status);
printf("exit code %d\n", status);
如果你这样做,如果子进程有段错误,你很可能会看到“退出代码11”。如果子进程实际调用了exit(11)
,您可能会看到"exit code2816“。
最好将这些东西称为“等待代码”或“等待状态”,而不是“退出代码”,以避免与传递给exit的值混淆。等待代码包含几段打包成单个整数的信息。通常,您不应该直接查看整数(就像我在上面的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 */
}
发布于 2015-06-29 02:34:15
在某些情况下,没有定义应用程序必须设置哪些退出代码的标准。哪种退出代码代表哪个错误甚至是成功,完全取决于程序员!
有时程序员认为任何不同于零的值都表示错误,而有时此值等于操作系统错误代码。
在Windows上,由于文件存在问题,可能会使用退出代码11。如果您想要此错误代码的描述(特定于Windows,而不一定是您的应用程序),请运行net helpmsg 11
。
https://stackoverflow.com/questions/31103254
复制相似问题