如果进程的退出状态为0,则认为该进程已在Linux中正确完成.
我已经看到,分割错误通常会导致退出状态为11,尽管我不知道这只是我工作的惯例(像那样失败的应用程序都是内部的)还是一个标准.
Linux中的进程是否有标准的退出代码?
如果进程的退出状态为0,则认为该进程已在Linux中正确完成.
我已经看到,分割错误通常会导致退出状态为11,尽管我不知道这只是我工作的惯例(像那样失败的应用程序都是内部的)还是一个标准.
Linux中的进程是否有标准的退出代码?
从wait(2)
& co.返回时,8位返回码和8位终止信号数被混合成一个值.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
int main() {
int status;
pid_t child = fork();
if (child <= 0)
exit(42);
waitpid(child, &status, 0);
if (WIFEXITED(status))
printf("first child exited with %u\n", WEXITSTATUS(status));
/* prints: "first child exited with 42" */
child = fork();
if (child <= 0)
kill(getpid(), SIGSEGV);
waitpid(child, &status, 0);
if (WIFSIGNALED(status))
printf("second child died with %u\n", WTERMSIG(status));
/* prints: "second child died with 11" */
}
您如何确定退出状态?传统上,shell只存储8位返回码,但如果进程异常终止,则设置高位.
$ sh -c 'exit 42'; echo $? 42 $ sh -c 'kill -SEGV $$'; echo $? Segmentation fault 139 $ expr 139 - 128 11
如果你看到的不是这个,那么这个程序可能有一个SIGSEGV
信号处理器,然后正常调用exit
,所以它实际上不会被信号杀死.(程序可以 Select 处理除SIGKILL
和SIGSTOP
之外的任何信号.)