Я пытаюсь сделать процессор фермы в C. Я начала с очередями открытия сообщения, а затем попытаться сделать рабочие процессы: (обратите внимание, что NROF_WORKERS является 5)только 1 ребенок после 5 вилок (C)
static void
makechildren (void) {
// Only the parent should fork. Any children created will become workers.
pid_t processID;
pid_t farmerPID = getpid(); // To identify who the farmer is
// Loop creating processes, indexed by NROF_WORKERS
int i = 0;
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++;
printf ("Parent is creating a child!%d\n", getpid());
processID = fork();
}
}
if (processID < 0){
perror("fork() failed");
exit(1);
}
else {
// If parent, start farming
if (processID == farmerPID) {
printf("Parent reporting in!%d\n");
}
// If child, become a worker
if (processID == 0) {
printf("Child reporting in!%d\n", getpid());
join();
}
}
}
Как вы можете видеть, я хочу, чтобы родитель сообщал обо всех случаях создания ребенка, а потом я хочу, чтобы родитель и все дети сообщали об этом. Однако, все это я получаю:
Parent is creating a child!11909
Parent is creating a child!11909
Parent is creating a child!11909
Parent is creating a child!11909
Parent is creating a child!11909
Child reporting in!11914
Теперь я заметить разницу в 11909 и 11914 5. Так что мой вопрос: создаются другие процессы? Если да, то почему они не сообщают? А если нет, что я делаю неправильно? Кроме того, родитель не сообщает вообще, как это вызвано?