Linux: отключение от GUI против терминала

458
user590536

Здравствуйте, я новичок в Linux и не могу понять, выключается ли компьютер из GUI так же, как из терминала с помощью команды:

выключение -P сейчас

PS При завершении процесса init получает какой-либо сигнал, такой как SIGPWR или SIGTERM, или он выключается по-другому? Надеюсь, вы можете помочь. Благодарю.

0
Предполагая, что ваш дистрибутив все еще использует `init` (многие сейчас используют` systemd`), `init` получает команду через сокет, который прослушивает (который может быть отправлен с помощью команды` poweroff` или `telinit`), чтобы переключиться на работу уровень 0 или 6. Это заставляет `init` запускать сценарии разрыва 'K *' с текущего уровня, а затем запускать сценарии установки 'S *' для нужного уровня - но на уровне выполнения 0 или 6 завершающий запуск сценария завершается. выключение системы или перезагрузка вместо запуска X. Я думаю, что настоящая команда, которая перезагружается или выключается, это `halt` (http://linux.die.net/man/8/halt). PID 1, который будет `init`, игнорирует SIGTERM. LawrenceC 7 лет назад 0

1 ответ на вопрос

1
grawity

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

Большое спасибо за ответ. Не могли бы вы ответить еще? Я создаю простую программу и запускаю процесс инициализации от имени другого пользователя. Какой самый простой способ закрыть его? user590536 7 лет назад 0

Похожие вопросы