我有以下程序,可以创建一定数量的子进程,比如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/

10-11 08:09