если выключение компьютера из GUI такое же, как из терминала с помощью команды:
Конечно, это зависит от графического интерфейса, но большую часть времени отправляется сообщение DBus, либо для инициализации напрямую, либо для чего-то вроде ConsoleKit / systemd-logind.
Хотя оба метода в конечном итоге приводят к тому, что init запускает процесс завершения работы, они в основном отличаются тем, какой тип авторизации они используют, например, завершение работы с помощью systemd-logind может быть инициировано любым пользователем, вошедшим в консоль, в то время как shutdown
команда обычно доступна только для пользователя root ,
(Однако это не относится к тому systemctl poweroff
, что проходит через более похожий на GUI механизм, чем shutdown
.)
Процесс init получает какой-либо сигнал типа SIGPWR или SIGTERM или отключается по-другому? Надеюсь, вы можете помочь. Благодарю.
Конечно, это зависит от системы инициализации, но большую часть времени сообщение IPC отправляется либо через D-Bus, либо через обычный сокет Unix, либо по именованному каналу.
systemd имеет D-Bus и
/run/systemd/private
как запасной вариант;У Upstart есть D-Bus и, видимо,
/run/initctl
тоже;SysV init имеет
/dev/initctl
, иногда/etc/.initctl
, недавно/run/initctl
.
(SIGPWR имеет другое значение - он просто сообщает init, что произошел сбой питания, без явного запроса каких-либо действий.)