创建多个子进程和 运行 execvp

Create multiple child processes and run execvp

我在 C 中有一个函数,它创建一个子进程并使其成为 运行 execvp

int Execute(char **arg)
{
    pid_t pid;
    int status;

    if ((pid=fork()) == 0)
    {

        execvp(arg[0],arg);

        perror("Execvp error");
        exit(1);
    }

    else if (pid > 0)
    {
        waitpid(pid, &status, 0);
    }
    else
    {
        perror("Fork error");
        exit(2);
    }
}

现在我想将函数更改为 运行 execvp 几次(例如 5),并让父进程等待所有子进程完成。尝试将其全部包装在 for 循环中,但 execvp 只执行一次。我知道基本上是execvp'replaces'当前的程序代码,但不知道是否迭代不下去。

感谢您的帮助!

首先,循环创建收集子 PID 的进程

pid_t pid[5];
int i;

for (i = 0; i < 5; i++) {
  if ((pid[i]=fork()) == 0) {
      execvp(arg[0],arg);

      perror("Execvp error");
      _exit(1);
  }
  if (pid[i] < 0) {
    perror("Fork error");
  }
}

其次,为每个有效的 PID 循环调用 waitpid。

for (i = 0; i < 5; i++) { 
  if (pid[i] > 0) {
    int status;

    waitpid(pid[i], &status, 0);
    if (status > 0) {
      // handle a process sent exit status error
    }
  } else {
    // handle a proccess was not started
  }     
}