если выключение компьютера из 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, что произошел сбой питания, без явного запроса каких-либо действий.)