Execvp不会在未知命令上返回错误

时间:2014-10-18 00:38:55

标签: c exec

我有以下代码,它们分叉并执行命令" 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");
    }
  }

}

1 个答案:

答案 0 :(得分:2)

该计划退出;它只是以非零状态退出。 WIFEXITED的主要反面是WIFSIGNALED - 请参阅wait()的POSIX规范以及其他选项的WIFSTOPPEDWIFCONTINUED

使用:

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);