excel 正在成功 - 但是正在调用 exit(1)

execl is suceeding - however exit(1) is being called

我试图更好地理解 exec() - 所以我在 testing.c

中有以下脚本

#include <stdio.h>
#include <sys/types.h>
#include <wait.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char ** argv)
{
  if(argc < 2) {
    fprintf(stderr,"Error:: Expecting an Argument!\n");
    exit(-1);
  }
  pid_t pid;
  pid = fork();
  if (pid==0) {
    execlp("./testing","testing",NULL);
    fprintf(stderr, "I want to get to here...\n");
    exit(-1);
  }
  wait(NULL);
  printf("Parent and child done\n");
  return 0;
}

下面的块是我用./testing one:

执行后的输出
Error:: Expecting an Argument!
Parent and child done

在阅读 exec() 的工作原理时,我希望在我的 execlp 调用后能够 fprintf,因为它应该返回 -1,我想知道我是否需要设置 errno 之类的东西,或者更明确地抛出一些东西,以便 execlp 重新识别错误?

输出:

Error:: Expecting an Argument!
Parent and child done

来自

(first line) child process tries to run but no command line parameter.  
(second line) parent process finishes

如果 execlp 函数成功启动了给定的程序,它 而不是 return。当前程序映像将替换为新程序的程序映像。因此,即使新程序以状态 -1 退出,它仍然不会返回到调用 execlp.

的程序

如果你想得到子进程的退出状态,传递一个int的地址给wait然后读取:

int main(int argc, char ** argv)
{
  if(argc < 2) {
    fprintf(stderr,"Error:: Expecting an Argument!\n");
    exit(-1);
  }
  pid_t pid;
  pid = fork();
  if (pid == -1 {
      perror("fork failed");
      exit(-1);
  } else if (pid == 0) {
    execlp("./testing","testing",NULL);
    perror("execlp failed");
    exit(-1);
  }
  int status;
  wait(&status);
  printf("child exit status: %d\n", WEXITSTATUS(status));
  printf("Parent and child done\n");
  return 0;
}