use*_*148 13 c exit-code segmentation-fault
C中退出代码11的一般含义是什么?我环顾四周,无法找到明确的答案,所以我想我会在这里问.当我尝试向向量添加元素时.
Gil*_*il' 11
你没有找到明确的答案,因为没有答案.由程序的作者决定他们希望使用哪些退出代码.标准C只表示exit(0)或exit(EXIT_SUCCESS)表明程序成功,这exit(EXIT_FAILURE)表示某种错误.(返回值main等于exit使用该值调用.)大多数常见操作系统(包括Windows,Linux,OSX等)使用0表示成功,使用值1到255表示错误; 仍然在错误代码之间进行选择取决于应用程序编写者,值11并不是特别的.
在Linux和大多数其他Unix变体中,信号编号11表示分段错误,正如Kerrek SB所述.当程序进行某种无效的内存访问时会发生分段错误,因此访问数组越界,或指针运算错误,或尝试访问空指针或其他与指针相关的错误都是合理的结果.信号11与退出代码11不同:当程序因信号而死亡时,它被标记为已被信号杀死,而不是正常退出.Unix shell通过报告退出代码来报告信号,退出代码是信号编号加上128,因此139表示分段错误.
小智 5
其他答案都错过了“退出代码”一词中可能存在的歧义。我怀疑您所说的“退出代码”是通过waitsyscall系列检索到的状态代码,如:
/* assume a child process has already been created */
int status;
wait(&status);
printf("exit code %d\n", status);
Run Code Online (Sandbox Code Playgroud)
如果您执行类似的操作,则子进程段错误可能会显示“退出代码11”。如果实际调用了子进程exit(11),则可能会看到“退出代码2816”。
最好将这些名称称为“等待代码”或“等待状态”,而不是“退出代码”,以避免与传递给退出的值混淆。等待代码包含几条信息,这些信息打包在一起形成一个整数。通常,您不应该直接查看整数(就像我在那上面所做的那样printf)。您应该改用W*from中的宏<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 */
}
Run Code Online (Sandbox Code Playgroud)
没有标准定义应用程序在某些情况下必须设置哪些退出代码。退出代码代表哪个错误甚至成功完全取决于程序员!
有时程序员认为任何不同于零的值都表示错误,有时该值等于操作系统错误代码。
在 Windows 上,由于文件问题,可能会使用退出代码 11 。如果您想要此错误代码的描述(特定于 Windows,不一定是您的应用程序),请运行net helpmsg 11.
| 归档时间: |
|
| 查看次数: |
42386 次 |
| 最近记录: |