zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Android自启动
    Eclipse导出Javadoc文件
    MAC 下Java Android 环境配置
    MAC 下如何切换Android模拟器的横竖屏
    程序员 需要掌握得600个英语单词
    网络编程 套接字socket 及 粘包
    网络编程 文件传输 基于UDP的socket serversocket
    网络编程 之 网络协议
    面向对象之:反射, 双下方法
    面向对象之 类的成员与异常处理
  • 原文地址:https://www.cnblogs.com/enhe/p/12141688.html
Copyright © 2011-2022 走看看