[*nix, Настройка Linux, Системное администрирование] fork() может глюкануть: это важно (перевод)

Автор Сообщение
news_bot ®

Стаж: 6 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
06-Окт-2020 13:31

Эх, fork(). Одни процессы порождают другие. Кажется, у меня есть история об этом.
Форк может глюкануть. Понимаете? В самое деле, понимаете? Это очень серьёзно. Форк может глюкануть. Так же, как и malloc. Нечасто, но когда такое происходит, нельзя просто взять и игнорировать это. Вы должны что-то предпринять в таком случае.
Похоже, всем известно, что fork возвращает дочернему процессу 0, а родителю некоторое положительное число — pid ребенка. Он выдаёт этот номер, который используется позже.
Угадайте, что происходит, когда вы не проверяете ответ на ошибку? Да, вы возьмёте "-1" (глюк форка) как pid.
Это только начало. Настоящая боль начинается позже, когда приходит время послать сигнал. Может, вы захотите закрыть дочерний процесс.
Вы делаете kill(pid, signal). Например, kill(pid, 9).
Что происходит, когда когда pid равен -1? Это действительно важно знать. Реально важно.



Здесь я вставлю со справочной страницы kill(2) со своего Linux.
Если pid равен -1, то sig отправляется каждому процессу, для которого вызывающий процесс имеет разрешение на отправку сигналов, за исключением процесса 1(init)...

Видите? Убить pid -1 эквивалентно уничтожению всех остальных процессов. Если вы рут, то на этом всё закончилось. Остались вы и init. Всё остальное ушло, ушло, ушло.
У вас есть код, который управляет процессами? Когда-нибудь находили машину полностью мертвой, за исключением текстовой консоли getty/login (которых перезапуксает init, естественно) и менеджера процессов? Наверное, винили в этом oomkiller в ядре?
Возможно, он не виноват. Лучше проверьте, что вы не запустили kill(-1).
В Unix достаточно ловушек и медвежьих капканов на любой вкус.
===========
Источник:
habr.com
===========

===========
Автор оригинала: Rachel Kroll
===========
Похожие новости: Теги для поиска: #_*nix, #_nastrojka_linux (Настройка Linux), #_sistemnoe_administrirovanie (Системное администрирование), #_linux, #_fork, #_*nix, #_nastrojka_linux (
Настройка Linux
)
, #_sistemnoe_administrirovanie (
Системное администрирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 03-Май 08:31
Часовой пояс: UTC + 5