我有以下代码,它们分叉并执行命令" a",这是一个未知命令。但是,execvp不会返回错误,而是"成功"打印出来。如果我做了#34; 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");
}
}
}
答案 0 :(得分:2)
该计划退出;它只是以非零状态退出。 WIFEXITED
的主要反面是WIFSIGNALED
- 请参阅wait()
的POSIX规范以及其他选项的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);