gpt4 book ai didi

创建多个子进程并运行 execvp

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:30 29 4
gpt4 key购买 nike

我在 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 基本上“替换”了当前程序代码,但不知道迭代是否不会继续。

感谢您的帮助!

最佳答案

首先,循环创建收集子 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
}
}

关于创建多个子进程并运行 execvp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com