为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2019-07-03 13:42:21
Linux中有任何标准的退出状态代码吗?如果进程的退出状态为0,则认为它在Linux中已正确完成。我已经看到,分段错误通常会导致退出状态为11,但我不知道这是否只是我工作的惯例(那些失败的应用程序都是内部的)还是一个标准。Linux中的进程是否有标准的退出代码?
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

返回时,返回码的8位和杀死信号数的8位混合到一个值中。wait(2)&Co..

#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通常情况下,它不会被信号杀死。(程序可以选择处理除SIGKILLSIGSTOP.)


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 605 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信