创建多个子进程和 运行 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
}
}
我在 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
}
}