zoukankan      html  css  js  c++  java
  • system返回值校验

    int xsystem(const char *cmd)
    {
        int err;

        err = system(cmd);

        if (err == -1) {
        fprintf(stderr, "%s: ERROR: fork failed before execution: `%s' ",
            __FUNCTION__, cmd);
        return -1;
        }   

        if (WIFSIGNALED(err)) {
        fprintf(stderr, "%s: ERROR: Child process died due to signal %d: `%s' ",
            __FUNCTION__, WTERMSIG(err), cmd);
        return -1;
        }   

        if (WIFEXITED(err)) {
        /* Normal child exit */
        return WEXITSTATUS(err);
        }   

        fprintf(stderr, "%s: ERROR: Received unintelligible return value from system: %d",
            __FUNCTION__, err);
        return -1;
    }

    子进程的结束状态返回后存于 status,底下有几个宏可判别结束情况:
    WIFEXITED(status)如果若为正常结束子进程返回的状态,则为真;对于这种情况可执行WEXITSTATUS(status),取子进程传给exit或_eixt的低8位。
    WEXITSTATUS(status)取得子进程 exit()返回的结束代码,一般会先用 WIFEXITED 来判断是否正常结束才能使用此宏。
    WIFSIGNALED(status)若为异常结束子进程返回的状态,则为真;对于这种情况可执行WTERMSIG(status),取使子进程结束的信号编号。
     
     
     
     
    nRet = system(sCommand);
     //WIFEXITED(stat)' 如果子进程正常退出则返回非;`WEXITSTATUS(stat)' 子进程返回的退出码  if (!((ZX_SYS_NO_ERROR != WIFEXITED(nRet)) && (ZX_SYS_NO_ERROR == WEXITSTATUS(nRet))))
     {   return -1;
     }
      测试的返回值为: 
     WIFEXITED(nRet)[[[1]]]
      WEXITSTATUS(nRet)[[[0]]]  rolesrv -k 这个命令执行成功的返回值为:0   
    ///////////////////////////////////////////////////////////////////////////////
    system返回值描述 
    -1 创建失败或者程序的退出状态无法获得,也就是fork或者waitpid失败 -----这个可能资源问题或者系统限制导致创建子进程失败。 127 执行程序失败,也就是exec失败------------------------------------执行脚本存在问题,例如程序无权限或者不存在。  
    当前专家建议:
                 请检查主机资源是否足够或者线程数超过系统设置最大阀值:
     
        修改后:
             返回为-1,请参考返回的系统错误码和错误信息,检查主机设置最大进程数和系统资源是否不足。
             返回为127,请检查执行脚本是否存在问题,例如没有权限或者执行程序不存在等
     
     
     
     
  • 相关阅读:
    mongoDB 获取系统时间
    android应用程序监听SMS Intent广播
    安卓开发之探秘蓝牙隐藏API
    Android内存优化解决 资料和总结的经验分享
    android 访问SMS短信收件箱
    Android 和 PHP 之间进行数据加密传输
    Android开发 MMS支持 创建和编辑MMS
    android 动态改变屏幕方向
    Android 使用 Gmail 来发送邮件
    android数据库操作之直接读取db文件
  • 原文地址:https://www.cnblogs.com/jingzhishen/p/3635472.html
Copyright © 2011-2022 走看看