创建多个子进程并运行execvp

时间:2016-11-11 15:23:43

标签: c linux fork 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'取代'当前的程序代码,但不知道迭代是否继续。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

$("button").click(function(e){
  var text = $(e.target).closest(".row").find(".print").text();

  alert(text)
})

其次,循环遍历waitpid调用每个有效的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");
  }
}