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 командование

Другие вопросы по тегам