繁体   English   中英

一个父进程中的多个子进程

[英]Multiple Child Processes from one Parent Process

我正在使用fork实现一个简单的父/子处理程序。 我的目标是从单个父级创建用户输入数量的子进程,并将其PID存储在动态数组中。 我设法使用fork创建了子进程并存储了它们的PIDS。 但是,当我存储PID时,我也存储了0 PID和我认为与进程相关的另一个PID,但是这个数字比孩子和父母大得多。

当显然仅在父流程中完成此操作时,怎么办?

void createProcesses(int nProcess) {
  int i;
  int PID;
  processIDS = calloc(nProcess, sizeof(long));

  printf("*****Creating Processes*****\n");

  printf("Parent Process: PID %d\n", getpid());
  for (i = 0; i < nProcess; i++) {
    PID = fork();
    if (PID == 0) {
      printf("Child Process: PID %d\n", getpid());
      while(1){}
    }
    else if(PID != 0) {
      // sleep(3);
      // printf("Number of child processes created: %d\n", nProcess);
      // updateProcessList();
      *(processIDS + i) = PID;
      printf("%d\n", PID);
    }
  }
  for(i = 0; i < sizeof(processIDS); i++) {
    printf("%ld\n", *(processIDS + i));
  }
  while(1) {
    sleep(5);
    updateProcessList();
  }
}

processIDS is a long * global variable.

问题在这里:

  for(i = 0; i < sizeof(processIDS); i++) {
    printf("%ld\n", *(processIDS + i));
  }

因为processIDS是一个指针,所以它的大小是long *的大小,可能是4或8,这不是您想要的。 如果nProcess的值小于此值, nProcess读取动态分配的数组的末尾,并调用未定义的行为。

您知道已经创建了nProcess进程,因此可以将其用于循环测试:

  for(i = 0; i < nProcess; i++) {
    printf("%ld\n", *(processIDS + i));
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM