Я довольно новичок в unix вызовах sys, и недавно я столкнулся с проблемой, когда существует несколько вызовов fork () для дочернего процесса. И я запутался по поводу вывода.
int main() {
int count = 0;
int pid;
if (!(pid = fork())) {
while ((count < 2) && (pid = fork())) {
count++;
printf("Count for pid: %d: %d\n", getpid(), count);
}
if (count > 0) {
printf("Count for pid: %d: %d\n", getpid(), count);
}
}
if (pid) {
printf("pid is %d, and we waitpid\n", pid);
waitpid(pid, 0, 0);
count = count << 1;
printf("Count for pid: %d: %d\n", getpid(), count);
}
}
, и вывод, который я получил:
pid is 12933, and we waitpid
Count for pid: 12933: 1
Count for pid: 12933: 2
Count for pid: 12933: 2
pid is 12935, and we waitpid
Count for pid: 12935: 1
Count for pid: 12933: 4
Count for pid: 12932: 0
Так что мой вопрос, как получилось, что есть только 3 уникальных pid, не должны fork
в то время как l oop создает больше дочерних процессов, чем 3?