Может быть, большинству из вас это покажется ребячеством, но я не могу понять этот небольшой фрагмент кода.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char** argv) {
int i, pid;
pid = fork();
printf("Forking the pid: %d\n",pid);
for(i =0; i<5; i++)
printf("%d %d\n", i,getpid());
if(pid)
wait(NULL);
return (0);
}
Результат этой программы
Forking the pid: 2223
0 2221
1 2221
2 2221
3 2221
4 2221
Forking the pid: 0
0 2223
1 2223
2 2223
3 2223
4 2223
Press [Enter] to close the terminal ...
В цикле for команда printf используется один раз. Почему «разветвление pid» и после этого pid печатаются дважды. Как это работает? Кто-нибудь может мне это объяснить? Заранее спасибо. Может ли кто-нибудь объяснить мне, почему мы должны использовать ожидание здесь? Из справочных страниц я понял, что ожидание возвращает управление родительскому процессу? Правильно ли я понял? Нужно ли использовать ожидание после разветвления процесса? Операционная система: ubuntu, компилятор: gcc, IDE: netbeans
fork
! Вы разветвили процесс, и все после разветвления выполняется дважды, потому что теперь у вас два процесса! Вы в основном спрашиваете, почемуfork
разветвляется! - person AnT   schedule 29.09.2010