我有一个问题,在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
显然我在所有两个文件中都很好地链接了信号量。