猿问

Linux中有任何标准的退出状态代码吗?

Linux中有任何标准的退出状态代码吗?

如果进程的退出状态为0,则认为它在Linux中已正确完成。

我已经看到,分段错误通常会导致退出状态为11,但我不知道这是否只是我工作的惯例(那些失败的应用程序都是内部的)还是一个标准。

Linux中的进程是否有标准的退出代码?


万千封印
浏览 606回答 3
3回答

侃侃尔雅

返回时,返回码的8位和杀死信号数的8位混合到一个值中。wait(2)&Co..#include&nbsp;<stdio.h>#include&nbsp;<stdlib.h>#include&nbsp;<sys/types.h>#include&nbsp;<sys/wait.h>#include&nbsp;<unistd.h>#include&nbsp;<signal.h>int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;status; &nbsp;&nbsp;&nbsp;&nbsp;pid_t&nbsp;child&nbsp;=&nbsp;fork(); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(child&nbsp;<=&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(42); &nbsp;&nbsp;&nbsp;&nbsp;waitpid(child,&nbsp;&status,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(WIFEXITED(status)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("first&nbsp;child&nbsp;exited&nbsp;with&nbsp;%u\n",&nbsp;WEXITSTATUS(status)); &nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;prints:&nbsp;"first&nbsp;child&nbsp;exited&nbsp;with&nbsp;42"&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;fork(); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(child&nbsp;<=&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kill(getpid(),&nbsp;SIGSEGV); &nbsp;&nbsp;&nbsp;&nbsp;waitpid(child,&nbsp;&status,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(WIFSIGNALED(status)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("second&nbsp;child&nbsp;died&nbsp;with&nbsp;%u\n",&nbsp;WTERMSIG(status)); &nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;prints:&nbsp;"second&nbsp;child&nbsp;died&nbsp;with&nbsp;11"&nbsp;*/}你是如何确定退出状态的?传统上,shell只存储8位返回代码,但如果进程被异常终止,则设置高位。$&nbsp;sh&nbsp;-c&nbsp;'exit&nbsp;42';&nbsp;echo&nbsp;$? 42 $&nbsp;sh&nbsp;-c&nbsp;'kill&nbsp;-SEGV&nbsp;$$';&nbsp;echo&nbsp;$? Segmentation&nbsp;fault 139 $&nbsp;expr&nbsp;139&nbsp;-&nbsp;128 11如果您看到的不是这个,那么程序可能有一个SIGSEGV信号处理程序,然后调用exit通常情况下,它不会被信号杀死。(程序可以选择处理除SIGKILL和SIGSTOP.)
随时随地看视频慕课网APP
我要回答