Насколько атомным является системный вызов fork ()? - PullRequest
0 голосов
/ 23 ноября 2018

Предполагается, что check_if_pid_exists(pid) возвращает true, если процесс с таким pid существует (но, возможно, еще не запущен), или false, если нет процесса с таким pid ,есть ли шанс в родительском коде для состояния гонки, когда fork() вернул дочерний элемент pid , однако у ядра не было возможности инициализировать структуры данных, чтобы check_if_pid_exists(child) вернул false?Или, возможно, после возврата из fork() у нас есть гарантия, что check_if_pid_exists(pid) вернет true?

pid_t child = fork();

if (child == 0) {
  /* here the child just busy waits */
  for (;;)
    ;
}

if (child > 0) {
  /* here the parent checks whether child PID already exists */
  check_if_pid_exists(child);
}
...