返回顶部
首页 > 资讯 > 操作系统 >Shell程序退出状态码的命令详解
  • 711
分享到

Shell程序退出状态码的命令详解

2024-04-02 19:04:59 711人浏览 独家记忆
摘要

目录程序退出状态码前言状态码简介退出码表实例说明退出码——1shell内部操作失败——退出码2退出码126命令没有找到——退出码127信号值&mda

目录
  • 程序退出状态码
    • 前言
    • 状态码简介
  • 退出码表
    • 实例说明
      • 退出码——1
      • shell内部操作失败——退出码2
      • 退出码126
      • 命令没有找到——退出码127
      • 信号值——128+n(信号对应的数值)
      • 不在范围内不的退出码
    • C/python语言获取进程退出的状态码
      • 总结

        在本篇文章当中主要给大家介绍了一些常见的程序退出的状态码!并且给出一下例子帮助大家仔细理解,并且使用C语言Python语言实现获取子进程退出时候的退出状态码。

        程序退出状态码

        前言

        在本篇文章当中主要给大家介绍一个shell的小知识——状态码。这是当我们的程序退出的时候,子进程会将自己程序的退出码传递给父进程,有时候我们可以利用这一操作做一些进程退出之后的事情,比如当程序执行失败或者被某个信号杀死我们就可以了解到,然后做出对应的措施。

        状态码简介

        Shell程序退出状态码的命令详解

        上图是一个zsh的截图,当我们执行命令asdsad之后,因为没有这个命令,所以zsh(类似于bash的一种shell),输出没有找到这个命令,但是我们发现图中箭头➡️由绿色变成红色,表示程序不是正常退出。现在有一个问题是,zsh是怎么知道程序不是正常退出的呢?其实就可以根据子进程退出的状态推断。在文章的最后我们用C语言实现一下,看看如果在父进程接收子进程的退出的状态。

        我们在命令行当中可以通过命令 echo $? 查看上一个进程退出时候的退出码,这里的上一个进程就是 ls 命令:

        Shell程序退出状态码的命令详解

        程序正常退出的时候退出码等于0。

        退出码表

        退出码含义例子解释
        1一般的错误除以0一般的除以0的错误,执行没有权限的操作
        2shell 内部操作失败 通常是shell操作时候的命令错误,文章后面有一个例子演示
        126执行不能够执行的文件/dev/random权限问题或者命令不能够执行
        127命令没有找到非法或者不存在的命令执行一个系统当中不存在的命令,可以通过设置PATH环境变量
        128+n错误的信号值Kill -9 PID杀死进程号为PID的进程,进程的退出码等于 128 + 9
        130ctrl+c 之后进程的返回值 和上一条一样ctrl+c的信号值等于2
        其他退出码s不在范围之内exit(-1)如果退出码n不在0-255之内,那么程序退出之后的退出码为n&255,并且取低8位作为最终的结果

        实例说明

        退出码——1

        除以0

        Shell程序退出状态码的命令详解

        执行没有权限的操作

        Shell程序退出状态码的命令详解

        上面直接进入root用户的目录,因为没有权限,查看进程的退出码等于1。

        shell内部操作失败——退出码2

        a=1
        if [ $a -eq 1 ]
        then
          echo hello world

        比如对于上面的shell脚本是有语法错误的正确的语法还需要在最后加上fi,现在我们执行上面的脚本查看结果:

        Shell程序退出状态码的命令详解

        退出码126

        当因为权限问题或者命令不可以执行那么进程的退出码就是126:

        Shell程序退出状态码的命令详解

        命令没有找到——退出码127

        Shell程序退出状态码的命令详解

        信号值——128+n(信号对应的数值)

        我们可以使用kil -l 命令查看 linux 操作系统当中信号以及对应的数值:

         1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
         6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
        11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
        16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
        21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
        26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGio    30) SIGPWR
        31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
        38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
        43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
        48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
        53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
        58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
        63) SIGRTMAX-1    64) SIGRTMAX

        当我们在命令行使用ctrl+c中断程序的执行的时候,这个正在执行的进程就会接受到SIGINT信号,根据上文这个信号对应的数值为2,因此程序的退出码等于130(128 + 2)。

        Shell程序退出状态码的命令详解

        下面是一个通过kill命令发送对应的信号的例子:

        Shell程序退出状态码的命令详解

        可以看到的程序的退出码是符号我们的预期的。

        不在范围内不的退出码

        不在范围内(0-255)的退出码,需要和 0xff 进行 & 操作,得到的结果作为无符号数作为最终的程序的退出码!

        Shell程序退出状态码的命令详解

        在上面的例子当中退出码256的二进制表示 1_0000_0000 他和 255(二进制表示为1111_1111)进行与操作得到的结果为1_0000_000,低8位等于0000_0000,因此最终的退出码等于0。

        Shell程序退出状态码的命令详解

        在上面的图当中-1的二进制表示等于1111_1111 因此最后得到的退出码等于1111_1111 = 255。

        C/Python语言获取进程退出的状态码

        #include <unistd.h>
        #include <sys/types.h>
        #include <sys/wait.h>
        #include <stdio.h>
         
        int main() {
         
          if(fork() ==  0) {
            _exit(1);  // 子进程执行
          } else {
            // 父进程执行
            int status;
            wait(&status);         // WEXITSTATUS 这个宏就是获取子
        

        在上面的代码当中父进程执行的 wait 函数就是等待子进程的状态变化,当子进程退出的时候 wait 函数会返回,同时将子进程一些状态信息保存在 status 当中,然后我们就可以子进程传递给父进程最后的信息啦。其中 WEXITSTATUS 这个宏就是获取子进程退出时候的退出码!对应的 python 实现如下图所示:

        import os
        import sys
         
        if __name__ == '__main__':
            pid = os.fork()
            if pid == 0:
                sys.exit(-1)
            else:
                pid, status = os.wait()
                print(os.WEXITSTATUS(status))

        总结

        在本篇文章当中主要给大家介绍了一些常见的程序退出的状态码!并且给出一下例子帮助大家仔细理解,并且使用C语言和python语言实现获取子进程退出时候的退出状态码。

        以上就是本篇文章的所有内容了,我是LeHung,我们下期再见!!!更多精彩内容合集可访问项目https://GitHub.com/Chang-LeHung/CSCore

        到此这篇关于Shell程序退出状态码的文章就介绍到这了,更多相关Shell退出状态码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

        --结束END--

        本文标题: Shell程序退出状态码的命令详解

        本文链接: https://lsjlt.com/news/99320.html(转载时请注明来源链接)

        有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

        猜你喜欢
        • Shell程序退出状态码的命令详解
          目录程序退出状态码前言状态码简介退出码表实例说明退出码——1shell内部操作失败——退出码2退出码126命令没有找到——退出码127信号值&mda...
          99+
          2024-04-02
        • Shell退出状态码及其应用详解
          Shell 中运行的命令会使用0-255之间的整数值,作为退出状态码,并以此来告知shell该命令执行的状态。通常情况下,约定0代表命令成功结束,非0代表程序非正常退出。 典...
          99+
          2022-06-04
          Shell退出状态码 Shell状态码
        • Shell退出状态码的方法
          这篇文章主要讲解了“Shell退出状态码的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell退出状态码的方法”吧!Shell 中运行的命令会使用0-255之间的整数值,作为退出状态...
          99+
          2023-06-09
        • Shell退出状态的使用
          每一条 Shell 命令,不管是 Bash 内置命令(例如 cd、echo),还是外部的 linux 命令(例如 ls、awk),还是自定义的 Shell 函数,当它退出(运行结束)时,都会返回一个比较小的整数值给调用(...
          99+
          2022-06-04
          Shell 退出状态
        • 详解bash中的退出状态机制
          程序的退出状态 当一个程序结束时会向父进程报告自己的退出状态( exit status ). 通过传递 int 类型的变量给库函数 exit 或系统调用 _exit 可以设置当前程序的退出状态, 在 linux 中, ...
          99+
          2022-06-04
          bash 退出状态 bash 退出
        • Shell $?获取函数返回值或者上一个命令的退出状态
          $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。 所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1,这和C语言的...
          99+
          2022-06-04
          Shell $? 函数返回值 shell 上一条命令
        • Shell退出状态的用法是什么
          这篇文章主要介绍“Shell退出状态的用法是什么”,在日常操作中,相信很多人在Shell退出状态的用法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Shell退出状态的用法是什么”的疑惑有所帮助!接下来...
          99+
          2023-06-09
        • Shell $?如何获取函数返回值或者上一个命令的退出状态
          这篇文章主要介绍“Shell $如何获取函数返回值或者上一个命令的退出状态”,在日常操作中,相信很多人在Shell $如何获取函数返回值或者上一个命令的退出状态问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
          99+
          2023-06-09
        • ps命令输出进程状态S+的含义解析
          最近发现一个问题,ps命令输出里面进程状态为S+的含义,网上好多文章都说是表明进程“位于在后台进程组”。 例如下面这个ps命令输出说明: D 不可中断 Uninterruptible sleep (usually ...
          99+
          2022-06-04
          ps命令进程状态 ps 命令S+
        • shell下time”命令的输出详解
          这篇文章主要讲解了“shell下time”命令的输出详解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“shell下time”命令的输出详解”吧!前言相信大家都知道bash下time是一个很有...
          99+
          2023-06-09
        • 详解Shell命令的执行顺序
          详解Shell命令的执行顺序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Shell 从标准输入或脚本中读取的每一行称为管道(pipeline);它包含了一个或...
          99+
          2023-06-09
        • shell(bash)下“time” 命令的输出详解
          前言 相信大家都知道bash下time是一个很有用的命令,它可以为一段脚本或一个程序的执行计时,这通常在粗略比较程序执行效率的时候很方便。但是你会发现,time命令输出的时间文字不能被简单地重定向,例如重定...
          99+
          2022-06-04
          详解 命令 shell
        • linux中怎么用shell命令查看进程状态
          要使用shell命令查看进程状态,可以使用以下命令: `ps`命令:用于显示当前正在运行的进程。可以使用不同的选项来过滤和格式化...
          99+
          2023-10-26
          linux shell
        • 进入mysql命令行和退出mysql命令行详解
          目录进入mysql命令退出mysql命令mysql命令行常用语句进入mysql之前基础命令行语句关于mysql用户访问与权限进入mysql命令 mysql -u 用户名 -p回车 然后输密码 或 mysql -u用户名 ...
          99+
          2022-11-22
          进入mysql命令行 退出mysql命令行 mysql命令行
        • 详解Linux中退出编辑模式的命令
          vim 有三种模式,注意:这三种模式有很多不同的叫法,我这里是按照鸟哥的linux书中的叫法。 一般指令模式、编辑模式、指令列命令模式 1.vim 文件名      进入...
          99+
          2022-06-04
          Linux中退出编辑模式的命令 linux退出编辑
        • linux中如何使用shell命令查看进程状态
          在Linux中,你可以使用`ps`命令来查看进程的状态。以下是几个常见的`ps`命令选项:1. `ps -ef`:列出所有进程的详细...
          99+
          2023-09-22
          shell linux
        • GPU状态监测 nvidia-smi 命令的用法详解
          目录今天详细解读一下 nvidia-smi 命令第二个命令:nvidia-smi -L在进行深度学习实验时,GPU 的实时状态监测十分有必要。 今天详细解读一下 nvidia-smi...
          99+
          2024-04-02
        • ps命令输出进程状态S+的含义是什么
          这篇文章主要介绍了ps命令输出进程状态S+的含义是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最近发现一个问题,ps命令输出里面进程状态为S+的含义,网上好多文章都说是...
          99+
          2023-06-09
        • 详解 Shell中的grep命令
          用‘grep'搜索文本文件 如果您要在几个文本文件中查找一字符串,可以使用‘grep'命令。‘grep'在文本中搜索指定的字符串。举个例子:假设您正在‘/usr/src/linux/Documentatio...
          99+
          2022-06-04
          详解 命令 Shell
        • 详解Linux服务器状态、性能相关命令
          服务器状态分析 查看linux服务器CPU详细情况 #查看CPU的信息 [root@host ~]# cat /proc/cpuinfo  #查看物理CPU的个数 [root@host /]# cat /p...
          99+
          2022-06-04
          linux 服务器命令 linux性能命令
        软考高级职称资格查询
        编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
        • 官方手机版

        • 微信公众号

        • 商务合作