[*nix, Настройка Linux, Системное администрирование] fork() может глюкануть: это важно (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Эх, 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
===========Похожие новости:
- Ubuntu RescuePack, Live-дистрибутив для борьбы с компьютерными вирусами
- [Разработка под Linux, IT-компании] МЦСТ выпустила дистрибутив «Эльбрус Линукс» версии 6.0
- [Информационная безопасность, Настройка Linux, Системное администрирование] С помощью подсистемы Windows для Linux 2 (WSL2) обходятся ограничения штатного файервола Windows 10
- [DevOps, Kubernetes, Серверное администрирование, Системное администрирование] АйТиБорода: Контейнеризация понятным языком. Интервью с System Engineers из Southbridge
- [API, MySQL, PHP, PostgreSQL, Разработка под Linux] Создание современного API на PHP в 2020 году
- [Настройка Linux] Настройка ядра Linux для GlusterFS (перевод)
- [Системное администрирование, Настройка Linux, Анализ и проектирование систем, Резервное копирование] Восстановление данных в современной инфраструктуре: как один админ бэкапы настраивал
- [Системное администрирование, Удалённая работа] Moscow calling, Hey operator, what's going on?
- [DevOps, Системное администрирование] Just add some Salt
- [*nix, Asterisk] Как мы переводили MIKOPBX с chan_sip на PJSIP
Теги для поиска: #_*nix, #_nastrojka_linux (Настройка Linux), #_sistemnoe_administrirovanie (Системное администрирование), #_linux, #_fork, #_*nix, #_nastrojka_linux (
Настройка Linux
), #_sistemnoe_administrirovanie (
Системное администрирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:20
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Эх, 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 ===========Похожие новости:
Настройка Linux ), #_sistemnoe_administrirovanie ( Системное администрирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:20
Часовой пояс: UTC + 5