linux执行命令返回值问题

返回值引起的一次问题

问题起始于一次命令调用出错,获取返回值为零的情况。在此做个记录。一个严谨的程序最少应该有两个返回值,零和非零,分别用来表示正常和异常的执行。

  • 问题背景:在linux中执行python脚本,脚本中使用cmd调用hive -e来执行hive sql,脚本使用命令的exit code退出。可是有几次异常退出后,python脚本执行的返回值为零,导致其他模块认为执行成功,不做处理。
  • 问题定位:在log中找到exit code,发现不为零。觉得应该是linux的返回值问题。发现exit code大于255而且刚好为256的整数倍。
  • 问题分析:linux的返回码为一个Byte(8位),即0~255,大于255则取模。

关于linux和c语言的exit code

exit code

都调用了系统调用的_exit,_exit函数中status参数定义了进程的终止状态,父进程可以通过wait()来获取该状态值。需要注意的是返回值,虽然status是int型,但是仅有低8位可以被父进程所用。所以写exit(-1)结束进程时,在终端执行“$?”会发现返回值是255。

退出状态码的约定

如果是shell相关的编程,退出值最好不要大于128,POSIX标准规定了退出状态和含义如下:

  • 0,命令执行成功
  • 1~125之间是由各个命令自己定义的。
  • 126,命令找到,文件无法执行
  • 128以上的返回值,是由内核来管理的,比如用中断信号终止一个程序运行,该程序的返回值就是130
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值