gpt4 book ai didi

c++ - 保持相同数量的子进程

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

我有以下程序创建一定数量的子进程,比如 20 个。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

#define NITER 20

int main()
{
pid_t pid;
int i;

printf("\nExemplo de aplicacao 02 da funcao fork()\n");
printf("Processo pai inicial tem PID=%5d\n", (int) getpid());
for(i=1; i<=NITER; i++) {
pid= fork();
if ( pid==-1 ) {
perror("Erro na funcao fork()");
exit(1);
}
if ( pid ) {
/* pid>0, codigo para o processo pai */
printf("Codigo do Pai (i=%2d): PID=%5d PPID=%5d\n", \
i, (int) getpid(), (int) getppid());
}
else {
/* pid=0, codigo para o processo filho */
printf("Codigo do Filho(i=%2d): PID=%5d PPID=%5d\n", \
i, (int) getpid(), (int) getppid());
}
}
return 0;
}

我想更改它,以确保只有 4 个子进程同时运行。它需要检查 4 个中的一个是否结束并自动创建一个新的。直到达到 20 个为止。有人可以帮忙吗?

最佳答案

启动你的 4 个 child ,然后使用 wait知道 child 何时退出并重新启动另一个 child 。


编辑 - 示例(未测试但应该给您一些提示):

int main ()
{
pid_t pid;
int process_count = 0, global_process_count = 0, max_process_count = 20;

while (global_process_count < max_process_count)
{
while (process_count < 4)
{
if ((pid = fork()) < 0)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid == 0)
{
// Child process
exit(EXIT_SUCESS);
}
++process_count;
++global_process_count;
}
while (waitpid(-1, NULL, WNOHANG) > 0)
--process_count;
}
}

关于c++ - 保持相同数量的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131955/

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