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
  • 相关阅读:
    Eclipse Java EE IDE for Web Developers集成的Maven 3 指向自己安装的 Maven
    Maven下载、安装和配置(二)
    shell脚本 如何调用Mysql的存储过程 解决方案
    Crontab的格式
    PHP 垃圾回收机制
    ChromePHP
    PHP 优化详解
    PHP 获取网页301|302真实地址
    PHP 常用函数回顾
    PHP基础 CGI,FastCGI,PHP-CGI与PHP-FPM
  • 原文地址:https://www.cnblogs.com/enhe/p/12141688.html
Copyright © 2011-2022 走看看