Дочерний процесс начинается с первой строки при создании (с форком)
Почему мой дочерний процесс начинается с первой строки main? Когда я запускаю свою программу, "Hello There" будет напечатан дважды. Дочерний процесс должен начинаться на линии после форка, я прав?
int main(){
printf("Hello There!");
pid_t PID;
PID = fork();
if(PID == 0){
//Child
}
else{
//parent
}
}
Это огромная проблема для меня, потому что в моей настоящей программе я делаю приватный файл с mmap перед fork. И из-за этого, что происходит со мной, родитель и ребенок имеют разные личные файлы..
1 ответ
Это НЕ вызывается дважды... Это обман зрения!:)
НО... ваш STDOUT не сбрасывается, потому что нет \n, ваш форк копирует все ваше состояние, оба процесса продолжаются, и в конечном итоге они сбрасываются, оба сбрасывают свои выходные буферы (копируются во время fork()), и заставляя выход появиться дважды.
Если вы добавите \n, измените строку printf следующим образом:
printf("Hello There!\n");
Теперь вы получите ожидаемые результаты.
Или очистите ваш вывод явно:
printf("Hello There!");
fflush(stdout);