我有以下代码可以派生一个孩子并执行命令“ a”,这是一个未知命令。但是,execvp不会返回错误,而是显示“成功”。如果我执行“ mv a b”,而文件“ a”不存在,也会发生相同的情况。我应该如何捕获和处理这些错误?
int main ( int argc, char **argv ){
pid_t pid;
char *execArgs[] = { "a", NULL };
pid = fork();
// if fork fails
if (pid < 0){
exit(EXIT_FAILURE);
}
else if (pid == 0){
execvp(execArgs[0], execArgs);
if (errno == ENOENT)
_exit(-1);
_exit(-2);
}
else{
int status;
wait(&status);
if(!WIFEXITED(status)){
printf("error\n");
}
else{
printf("success\n");
}
}
}
程序退出;它只是以非零状态退出。主相反的WIFEXITED
是WIFSIGNALED
-参见POSIX规范wait()
和WIFSTOPPED
以及WIFCONTINUED
其他选项。
使用:
int corpse = wait(&status);
if (corpse != -1 && WIFEXITED(status))
{
int estat = WEXITSTATUS(status);
char *err = (estat == 0) ? "success" : "failure";
printf("PID %d exited with status %d (%s)\n", corpse, estat, err);
}
else
printf("PID %d didn't exit; it was signalled\n", corpse);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句