不在范围内不的退出码不在范围内(0-255)的退出码,需要和 0xff 进行 & 操作,得到的结果作为无符号数作为最终的程序的退出码!
文章插图
在上面的例子当中退出码256的二进制表示 1_0000_0000 他和 255(二进制表示为1111_1111)进行与操作得到的结果为1_0000_000,低8位等于0000_0000,因此最终的退出码等于0 。
文章插图
在上面的图当中-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 这个宏就是获取子进程退出时候的退出码 printf("status = %d\n", WEXITSTATUS(status)); } return 0;}在上面的代码当中父进程执行的 wait 函数就是等待子进程的状态变化 , 当子进程退出的时候 wait 函数会返回 , 同时将子进程一些状态信息保存在 status 当中,然后我们就可以子进程传递给父进程最后的信息啦 。其中 WEXITSTATUS 这个宏就是获取子进程退出时候的退出码!对应的 python 实现如下图所示:
import osimport sysif __name__ == '__main__': pid = os.fork() if pid == 0: sys.exit(-1) else: pid, status = os.wait() print(os.WEXITSTATUS(status))总结【Shell揭秘——程序退出状态码】在本篇文章当中主要给大家介绍了一些常见的程序退出的状态码!并且给出一下例子帮助大家仔细理解,并且使用C语言和python语言实现获取子进程退出时候的退出状态码 。
推荐阅读
- 六部恋爱甜甜电影推荐——冬天到了 一起恋爱吧 1. 这部电影也太好看了
- 0025:2011年NOIp普及组真题——瑞士轮题解
- 4 .NET 6学习笔记——如何在.NET 6的Desktop App中使用Windows Runtime API
- 学习ASP.NET Core Blazor编程系列八——数据校验
- 1 Redis—问题
- 自己动手写线程池——向JDK线程池进发
- 『现学现忘』Git分支 — 39、Git中分支与对象的关系
- 虚拟化_Vmware——敬请期待!
- 虚拟化_Xen——敬请期待!
- 『现学现忘』Git分支 — 38、Git分支介绍