На нескольких компьютерах под управлением Ubuntu 14.XX я запустил команду «killall init» как пользователь, и меня сразу же вышли из системы. Я мог бы войти снова без проблем. Почему это? Что происходит за кулисами?
12
В более новых системах Upstart процесс инициализации сеанса запускается при входе в систему с помощью графического интерфейса. Так как Ubuntu использует Upstart, есть init
процесс для вашего сеанса. Проверьте это с помощью pstree -ps $$
терминала:
$ pstree -ps $$
init(1)───lightdm(1741)───lightdm(9511)───init(9526)───/usr/bin/termin(9570)─┬─gnome-pty-helpe(9734)
└──zsh(7944)
Поэтому, когда вы запускаете killall init
, вы убиваете не init
PID 1 (потому что у вас нет привилегии), а ваш сеанс init
, который в данном примере будет PID 9526.
Так как это init
основной процесс для вашего сеанса GUI, его уничтожение убивает ваш сеанс, и поэтому вы вышли из системы.
pkill
а неkillall
потому, чтоkillall
работает совершенно по-другому на других системах, таких как Solaris ...killall
убивает всех Отсюда и название.killall init
какroot
не кажется хорошей идеей - особенно в полезной системе - я думаю, чтоinit
вызывает панику ядра, если оно умирает, потому что оно не предназначено для достижения когда-либоreturn
в конце своегоmain
цикла кода.