Предполагается, что 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);
}