用于创建n个子进程的函数

时间:2013-12-10 15:48:23

标签: c linux unix fork parent-child

int proc_create(int n)
{
   int pid;
   n = n+1;
   printf("The parent process id: %d\n", getpid());
   while(1)
   {
      if(pid=fork() < 0){
         perror("Fork Failed!");
         exit(1);
      }else{
         printf("The child process ID is: %d\n", pid);
      }
   }
}

我编写了上面的函数,它将创建n个子进程,每个子进程将打印出自己的子进程ID。有人能告诉我这些缺陷以及如何改进上述功能。

1 个答案:

答案 0 :(得分:2)

n是一个局部变量,所以你只需要做n + 1,它不会改变任何东西。

它会创建无限的子进程,因为fork位于while(1)循环

int *proc_create(int n) {
    int *childs = malloc(sizeof *childs * n);

    printf("The parent process id: %d\n", getpid());
    for (int i = 0; i < n; i++) {
        int pid = fork();
        if (pid < 0) {
            perror("Fork Failed!");
            exit(1);
        } else if (pid == 0) {
            return NULL;
        } else {
            childs[i] = pid;
            printf("The child process ID is: %d\n", pid);
        }
    }

    return childs;
}

此过程会产生N个孩子,当他们从proc_create()返回时,他们将返回NULL。父节点将返回一个包含其N个子节点的pids的数组。