如何 运行 2 child 进程,但 运行 在 C 中一个接一个?

How to run 2 child processes, but run one subsequent to another in C?

我正在尝试在一个新程序中 运行 两个 pre-made 可执行文件,但是 运行 这两个原始可执行文件各自在它们自己的 child 进程中,所以基本上,只需将一个 parent 进程 fork() 分成两个 child 即可。但是,我看到很多关于 运行 宁多个 child 进程 并行 的问题,但我想先 运行 一个,等待第一个完成,然后 运行 第二个。也许这不言而喻,但是之后,在第二个 child 完成后 return 到 parent 进程(所以我可以打印一些消息通知用户两个可执行文件都是完成的)。我对使用 wait() 和 waitpid() 函数非常不熟练,而这些函数对我正在尝试做的事情非常关键。 无论如何,有人可以给我一个快速示例程序,以确保一个 child 处理 运行s 后续 到第二个?非常感谢您的宝贵时间!!

system("command1");
system("command2");

这大致相当于以下内容:

{
   const char* child_argv[] = { "command1", NULL };
   pid_t pid = fork();
   if (!pid) {
      execvp(child_argv[0], child_argv);
      exit(255);  // errno should probably be sent to parent first.
   }

   waitpid(pid, NULL, 0);
}

{
   const char* child_argv[] = { "command2", NULL };
   pid_t pid = fork();
   if (!pid) {
      execvp(child_argv[0], child_argv);
      exit(255);  // errno should probably be sent to parent first.
   }

   waitpid(pid, NULL, 0);
}

在 POSIX 系统上,您可以使用 spawn 而不是 fork

{
   const char* child_argv[] = { "command1", NULL };
   pid_t pid;
   posix_spawnp(&pid, child_argv[0], NULL, NULL, child_argv, environ);
   waitpid(pid, NULL, 0);
}

{
   const char* child_argv[] = { "command2", NULL };
   pid_t pid;
   posix_spawnp(&pid, child_argv[0], NULL, NULL, child_argv, environ);
   waitpid(pid, NULL, 0);
}

后两种解决方案避免使用 shell(如果您有文件名或路径而不是 shell 命令,这是一件好事)。

当然,这三个片段都缺少错误检查。