Как systemd переживает убийство -9?

28

Между недавними вопросами «Почему« kill -9 0 »заканчивает мою консольную сессию» »и« Как вызвать панику в ядре »я получил задницу под седлом и примерил kill -9 1в основном современный ноутбук Arch linux. Я сделал это как идентификатор пользователя "root".

Я полностью ожидал какого-то сбоя, паники или отключения, но ничего не произошло. Я сделал kill -9 1снова, безрезультатно.

Машины Arch Linux работают в systemdнаши дни, так: как systemdвыжить при убийстве -9? Я ожидаю, что в ядре Linux 3.7 есть специальный код случая, но, возможно, существует какая-то другая причина, о которой я не думал.

А как насчет других вещей, которые работают с PID 1? initЯ полагаю, что Slackware все еще использует , но я боюсь попробовать его на своем рабочем сервере Slackware. DD-WRT на моем беспроводном маршрутизаторе запускает / sbin / init.

Брюс Эдигер
источник

Ответы:

33

От man 2 kill:

Единственные сигналы, которые могут быть отправлены в ID процесса 1, процесс init, - это сигналы, для которых init явно установил обработчики сигналов. Это сделано для того, чтобы система не была случайно отключена.

То есть, initпри получении можно делать все, что угодно, SIGKILLвключая выход, но initd-файл systemd не устанавливает для него никакого обработчика сигнала, поэтому ничего не происходит.

Крис Даун
источник
4
Спасибо, что заметили это. Это специфично для Linux? Кажется, я помню, как разбил рабочую станцию ​​SunOS в начале 90-х, убив init по ошибке. Или не. Я был намного более безрассудным в моей юности.
Брюс Эдигер
1
@BruceEdiger, я тоже, кажется, помню, как мог kill -9 initвызывать панику в ядре. Похоже, что он изменился в какой-то момент.
psusi
2
@BruceEdiger - я попробовал это для сервера AIX и HP-UX. Оба вернули сообщение об ошибке: kill: 1: 0403-068 Сигнал недопустим для этого процесса ИЛИ kill: 1: указанный процесс не существует. В справочной странице конкретно упоминается, что это вернет ошибку. Многие люди говорят мне, что это можно сделать ранее, но никто не преуспел за последние 10 с лишним лет.
DarkHeart
2
@BruceEdiger Из некоторых поисков видно, что это недавняя (по крайней мере, с точки зрения продолжительности жизни Unix) разработка. К сожалению, я не был жив в начале 90-х, так что когда это произошло, это было за пределами моих знаний. Было бы интересно узнать, хотя, так как кажется, что почти все современные Unices перешли на это поведение по умолчанию.
Крис Даун