Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RHEL5评估C中的WEXIT状态_C_Posix - Fatal编程技术网

使用RHEL5评估C中的WEXIT状态

使用RHEL5评估C中的WEXIT状态,c,posix,C,Posix,我最近写了一篇deamon,我用它来自动化不同服务器之间的数据移动以及其他事情。我正在使用rsync,rsync工作得很顺利 然而,我不得不在我们的一台服务器上的rsync调用中添加一个特定的排除项,从那时起,我的代码在使用rsync时再也看不到成功。我尝试过手动运行rsync,每次它都返回success。此外,即使守护进程调用rsync,它也会成功复制所有文件,因此问题不在于rsync。然而,doSomeOtherThing()函数没有被调用,相反,我收到了errorEmail3()向我抛出的

我最近写了一篇deamon,我用它来自动化不同服务器之间的数据移动以及其他事情。我正在使用rsync,rsync工作得很顺利

然而,我不得不在我们的一台服务器上的rsync调用中添加一个特定的排除项,从那时起,我的代码在使用rsync时再也看不到成功。我尝试过手动运行rsync,每次它都返回success。此外,即使守护进程调用rsync,它也会成功复制所有文件,因此问题不在于rsync。然而,doSomeOtherThing()函数没有被调用,相反,我收到了errorEmail3()向我抛出的错误电子邮件。这是GNUC

这是我的密码:

pid_t pid;
pid = fork();
if (pid == 0) {
  char *args[NUM_ARGS]
  args[0] = strdup("rsync");
  ...
  ...
  execvp(args[0], args);
  fprintf(stderr, "execvp ain't workin\n");
  exit(1);
}
else if (pid == -1) {
  erroremail1();
  return;
}
else {
  int childstat;
  if (waitpid(pid, &childstat, 0) == -1) {
    perror("waitpid");
    exit(1);
  }
  else {
    if (!WIFEXITED(childstat)) {
      errorEmail2();
    }
    else {
      if (WEXITSTATUS(childstat) == EXIT_SUCCESS) {
        doSomeOtherThing();
      }
      else {
        errorEmail3();
      }
    }
  }
}
我包含了sys/wait.h以及所有其他相关的头文件

我可能错过了一些非常愚蠢和明显的东西,我希望有第二双眼睛来看看这个

编辑:复制的代码不正确,已修复 编辑2:修复了另一个打字错误。
编辑3:添加了错误检查的准确代码

什么是退出状态?这不应该是
EXIT\u SUCCESS
?OT:调用
waitpid()
会错过错误检查。如果is失败
childstat
将在未初始化的情况下读取,这反过来会引发未定义的行为。另一个坏拷贝。抱歉,即将修复。从您的“坏拷贝”中,我得到的印象是您没有显示“真实”代码。打印所有有趣值的代码在哪里,例如
rsync
的PID和退出状态,以及
waitpid()
返回的实际值,以及
childstat
中的原始值等等?如果你没有这些数据,你就不知道出了什么问题。确保打印所有此类相关信息,至少在使用调试标志运行守护程序时是这样(考虑将其设置为
-dn
,用于各种N值,以便根据需要生成更多或更少的数据)。“execvp不工作”消息也不会给您任何帮助;它应该打印
argv
中的值。