Дочерний процесс начинается с первой строки при создании (с форком)

Почему мой дочерний процесс начинается с первой строки 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);
Другие вопросы по тегам