我最近写了一个deamon,我用它来自动化各种服务器之间的数据移动,以及其他事情。我正在使用rsync,rsync正在游戏中工作。
但是,我必须在我们的一台服务器上的rsync调用中添加一个特定的排除,从那时起,我的代码在使用rsync时再也看不到成功了。我尝试手动运行rsync,每次都返回成功。此外,即使守护进程调用rsync,它也会成功复制所有文件,因此问题不在于rsync。然而,doSomeOtherThing()函数未被调用,而是我收到errorEmail3()抛出的错误电子邮件。这是在GNU C。
这是我的代码:
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:添加了错误检查的确切代码