когда fork () возвращает значение, хранящееся в глобальной переменной - PullRequest
3 голосов
/ 13 февраля 2020

Я изучаю fork (), как я узнал, в fork () родитель и потомок имеют одинаковое «изображение», т. Е. Оба они указывают на одну и ту же таблицу страниц, на которой отмечены все ее записи в таблице страниц (когда Ядро обрабатывает системный вызов) только для чтения. при записи на страницу, например, при обновлении переменной, открывается анонимная страница и там хранятся изменения, следовательно, практически дочерний и родительский элементы не влияют на переменные друг друга. Я столкнулся со странным случаем, когда я не могу понять, что происходит. я не могу понять, что происходит, когда возвращаемое значение fork () попадает в переменную stati c и когда точно выполняется разбиение:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

static int a = 0;
static int r = 0;

int main() {
  r = fork();
  if (r > 0){
    a = 1;
  }
  if (a == 0) {
    fork();
  }
  return 0;
}

Сколько стоит fork () выполнены? первый явно происходит, будет ли второй? когда я запускаю код с некоторой печатью (и проверка форка успешна), он меняется от одного запуска к другому, хотя, как я узнал, это должно быть всегда 2 вилки . Это какая-то проблема в моем компьютере или программе, которую я использую для запуска кода, или я что-то упустил, и это изменяющееся поведение можно объяснить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...