Может ли root уничтожить процесс init (процесс с pid 1)? Каковы будут его последствия?
По умолчанию нет, это не разрешено. Под Linux (с man 2 kill
):
Единственные сигналы, которые могут быть отправлены процессу ID 1, процессу init, - это сигналы, для которых init явно установил обработчики сигналов. Это сделано для того, чтобы система не была случайно отключена.
Pid 1 (init) может решить позволить себе быть убитым, и в этом случае «kill» - это, по сути, запрос на его отключение. Это один из возможных способов реализации halt
команды, хотя я не знаю ни одного init
, кто это делает.
На Mac, убийство launchd
(его аналог init) с сигналом 15 (SIGTERM) немедленно перезагрузит систему, не заботясь о чистом завершении работы программ. Убить его с помощью неуловимого сигнала 9 (SIGKILL) ничего не значит, показывая, что kill()
семантика Mac в этом отношении совпадает с семантикой Linux.
На данный момент у меня нет под рукой Linux-бокса, с которым я бы хотел поэкспериментировать, поэтому вопрос о том, что Linux А в связи с тем, что init
делает с SIGTERM, придется подождать. init
проекты замены, такие как Upstart и Systemd, сейчас популярны, ответ может быть переменным.
ОБНОВЛЕНИЕ : В Linux init
явно игнорирует SIGTERM, поэтому он ничего не делает. @jsbillings обладает информацией о том, что делают Upstart и Systemd.
init
с помощьюSegmentation fault
(SIGSEGV
) сигнала, который приведет к панике ядра:kill -SEGV 1
SysV init игнорирует сигналы SIGKILL или SIGTERM. Насколько я могу судить, единственным сигналом, вызывающим изменение состояния, является SIGPWR, который планирует отключение, связанное с питанием.
Похоже, что Upstart и Systemd также не отвечают на SIGKILL, и из моего теста выяснилось, что SIGTERM вызывает повторный запуск upstart и systemd.
Я не уверен, что работают другие ответчики, но я уверен, что вы не можете убить -9 (SIGKILL) или убить -15 (SIGTERM) init (pid 1). Скорее всего, если бы вы смогли, вы бы испытали панику ядра, потому что init неожиданно завершился с ненулевым кодом завершения, что было бы не идеально. Он не выключает компьютер и не приводит к перезагрузке.
источник
Технически да, root может выдать SIGKILL для инициализации. Однако init отличается от большинства, почти всех на самом деле, других процессов тем, что ему разрешено перехватывать и игнорировать сигнал.
Вы можете свободно убить init, выполнив a,
kill -TERM 1
который был бы аналогичен выдачеhalt
илиshutdown
в этом init, передаст сигнал всем дочерним элементам, в основном всем другим процессам, перед тем как обработать сам сигнал.Пожалуйста , обратите внимание: При выполнении этой команды Волю перегрузить систему.
Для аромата; один тип другого процесса, который может «игнорировать» SIGKILL, - это процесс в непрерывном сне, например, ожидание ввода-вывода. Такой процесс может быть найден путем выдачи там,
ps axo stat,comm
где процессы со статусом «D» являются бесперебойными.источник
kill -TERM 1
ничего не произойдет, кроме как заставить init повторно выполнить себя на большинстве систем linux, и что единственное, что вы можете сделать, чтобы заставить систему выключить вашу систему, это запуститьkill -PWR 1
kill -TERM 1
определенно происходит перезагрузка (на самом деле происходит::shutdown:
запись и связанный скрипт в inittab.)Вы можете перезапустить
init
процесс. Это полезно для внесения измененийinittab
без перезагрузки.Источник: http://www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/
источник
init
я знаю, этот сигнал не заставляет процесс перезапускаться, а просто перезагружает/etc/inittab
файл. --- Наоборотsystemctl daemon-reexec
действительно делаетsystemd
(init
замена в Linux) для повторного выполнения.sudo kill -INT 1
(прерывание) перезапустит систему, иsudo kill -SEGV 1
(нарушение сегментации) илиsudo kill -ABRT 1
(прервать) вызовет панику ядра.примечание: требуется sudo.
источник
Ну, root может убить процесс инициализации в Linux:
Детали:
kill -9 1
не работает:Итак, давайте запустим
strace
:источник
SIGKILL
сPID1
момента объединения github.com/torvalds/linux/commit/… .Типа
sudo kill -INT 1
, тогда посмотри что получится.источник