systemd: Scope vs Service
Страница man для scope говорит:
В отличие от сервисных модулей, области видимости управляют внешне созданными процессами и не отключают процессы самостоятельно.
На моем RHEL-сервере я вижу, что gdm принадлежит службе gdm. Как и его ребенок, gdm-simple-slave. gdm-simple-slave создал gdm-session-worker, но этот процесс относится к области, а не к службе gdm.
В свете этого, что означает "внешне созданный процесс" и в чем разница между услугой и областью действия?
Для тех читателей, которые предпочитают код:
# systemctl status gdm
gdm.service - GNOME Display Manager
Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled)
Active: active (running) since Sun 2018-03-04 16:27:45 EST; 1 day 3h ago
Process: 1330 ExecStartPost=/bin/bash -c TERM=linux /usr/bin/clear > /dev/tty1 (code=exited, status=0/SUCCESS)
Main PID: 1307 (gdm)
CGroup: /system.slice/gdm.service
├─1307 /usr/sbin/gdm
├─1331 /usr/libexec/gdm-simple-slave --display-i...
└─1364 /usr/bin/Xorg :0 -background none -verbos...
# ps -ef|grep 1331
root 1331 1307 0 Mar04 ? 00:00:00 /usr/libexec/gdm-simple-slave...
root 2032 1331 0 Mar04 ? 00:00:00 gdm-session-worker ...
# systemctl status 2032
session-38.scope - Session 38 of user root
Loaded: loaded (/run/systemd/system/session-38.scope; static)
Drop-In: /run/systemd/system/session-38.scope.d
└─90-After-systemd-logind\x2eservice.conf, 90-After-systemd-user-sessions\x2eservice.conf, 90-Description.conf, 90-SendSIGHUP.conf, 90-Slice.conf
Active: active (running) since Sun 2018-03-04 21:12:08 EST; 22h ago
1 ответ
Внешне созданный процесс - это процесс, который был порожден процессом, отличным от демона systemd, работающего как PID 1.
И для области действия, и для службы systemd создаст cgroups, чтобы вы могли управлять процессами внутри нее в целом. (Например, вы можете использовать systemctl stop
остановить область и убить все процессы внутри нее.)
Но со службой systemd имеет командную строку для запуска и будет запускать ее в этой среде.
С gdm-session-worker, например, это на самом деле невозможно, так как он должен быть порожден gdm-simple-slave... Итак, чтобы сохранить отдельный сеанс для каждого gdm-session-worker, gdm будет по-прежнему связывайтесь с systemd, чтобы попросить его создать новую область, а затем создать этот gdm-session-worker в этой новой области.
Я надеюсь, что это ответит на ваш вопрос... Вы уже нашли man- страницу systemd scope. Если вы хотите более глубокого погружения в API, вам, возможно, захочется взглянуть на интерфейсы новой группы управления, хотя, возможно, более простой способ попробовать это - использовать systemd-run --scope
командование