我有以下程序,可以创建一定数量的子进程,比如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个子进程在运行。它需要检查其中一个是否结束,并自动创建一个新的。一直到20号为止。有人能帮忙吗?
最佳答案
启动你的4个孩子,然后使用wait
了解孩子何时退出并重启另一个孩子。
编辑-示例(未测试,但应提供一些提示):
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/