用execve的fork后无法同步进程等待

时间:2017-12-04 22:08:27

标签: c fork child-process execve

我有一个问题,在C中,在fork之后有一个execve。 我需要创造20个孩子,只有当他们成功创造时,我才能做到。 我正在使用信号量来执行此操作但仍然无法正常工作,因为在执行文件后我在fork之后运行,它会读取最后2或3个孩子。但我想“停止”文件并让他等待创作。

看看我的代码: Father.c

system("gcc person.c -o Person");
for(i = 0; i < NUM_PEOPLE; i++){
 if((pidprocesso = fork()) == 0) {

  // Insert in one struct
  insertInStruct(randType, randName, randDna, getpid(), 1, i);

  // Semaphore that have init val to NUM_PEOPLE
  reserve(sem_totchild); // This make a -1 operation

  char *argv[] = {"0", "1", "2", "stuff", NULL}; 

  execve("./Person", argv, NULL);
 }
}

person.c

while((semctl(sem_totchild, 0, GETVAL)) > 0){

  // Something to wait the end of creation
  // And I can't use sleep()
}

  // Code that will run after creation

显然我在所有两个文件中都很好地链接了信号量。

0 个答案:

没有答案