Чому запуск `killall init`, як користувач, виходив із системи?


12

На декількох комп'ютерах під управлінням Ubuntu 14.XX я запустив команду "killall init" як користувач, і одразу вийшов із системи. Я можу знову увійти без проблем. Чому це? Що відбувається за лаштунками?

Відповіді:


21

У нових системах Upstart процес запуску сеансу запускається під час входу за допомогою GUI. Оскільки 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, ви не вбиваєте initPID 1 (тому що у вас немає привілею), а ваш сеанс init, який був би PID 9526 у цьому прикладі.

Оскільки це initпроцес керування вашим сеансом графічного інтерфейсу, його вбивство вбиває вашу сесію, і тому ви вийшли з системи.


Чи завжди кіллалл передає сигнал найближчому родичу в дереві процесу? Якби я запустив команду як root (наприклад, sudo), я отримав би такий самий результат, або ядро ​​панікує?
Тім Сегуїн

1
@TimSeguine Як випливає з назви, він надсилається всім процесам з цим ім'ям. До речі, деякі люди вважають за краще pkillзамість того, killallщо killallпрацює зовсім інше в інших системах, таких як Solaris ...
glglgl

killallвбиває всіх. Звідси і назва.
Оріон

1
@TimSeguine Він надсилає всім, але якщо ви звичайний користувач, ви не можете надсилати сигнали процесам інших користувачів. Тож він впливає лише на той, який є у вашому власному дереві технологічних процесів.
Бармар

Працювати killall initяк rootне здається гарною ідеєю - особливо в корисній системі - я думаю, що initвикликає паніку ядра, якщо він гине, тому що він не призначений ніколи досягти returnкінця mainциклу коду.
SlySven
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.