• 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,请检查执行脚本是否存在问题,例如没有权限或者执行程序不存在等
     
     
     
     
  • 相关阅读:
    帆软报表实现全选全不选的功能
    knowledge_others
    skills_kafka
    skills_operation
    problems_others
    skills_windows
    c语言标识符
    快速排序法
    字符串处理scanf("%d%*c",&n);
    Byte.parseByte(String s,int radix)的解释
  • 原文地址:https://www.cnblogs.com/jingzhishen/p/3635472.html
Copyright © 2020-2023  润新知