systemdã¨cgroup
systemdã§ã¯cgroupãæ´»ç¨ãã¦ããããã ããµã¼ãã¹ãã¨ã«cgroupã§ã¢ã¤ã½ã¬ã¼ã·ã§ã³ããã¦ããã®ã§ãé¢ä¿ããããã»ã¹ãä¸ç¶²æå°½ã§æ®ºãããããµã¼ãã¹ãã¨ã®è³æºå©ç¨éã観測ã§ããã確ãã«pidããã¡ã¤ã«ã«è¨é²ãã¦ããã¦ã殺ãã£ã¦ã®ã¯ããµããããæµãã¨ãã¦ã¯ã¦ããããã¡ã¤ã«ã§ExecStopã§æå®ããã¦ããã³ãã³ããå®è¡ããããã§ãå½è©²ã°ã«ã¼ãã®ããã»ã¹ãæ®ã£ã¦ããå ´åã¯ãSIGTERMãSIGKILLã®é ã§ã·ã°ãã«ãæãããããªã詳細ã¯ã¬ãããããä¸äºããã®ãLinux女子部 systemd徹底入門ãã¨ãã
次ã¯systemd-cgtopã®å®è¡ä¾ã
Path Tasks %CPU Memory Input/s Output/s / 86 0.3 197.3M - - /system.slice/NetworkManager.service 2 - - - - /system.slice/auditd.service 1 - - - - /system.slice/avahi-daemon.service 2 - - - - /system.slice/crond.service 1 - - - - /system.slice/dbus.service 1 - - - - /system.slice/firewalld.service 1 - - - - /system.slice/iprdump.service 1 - - - - /system.slice/iprinit.service 1 - - - - /system.slice/iprupdate.service 1 - - - - /system.slice/lvm2-lvmetad.service 1 - - - - /system.slice/polkit.service 1 - - - - /system.slice/postfix.service 3 - - - - /system.slice/rsyslog.service 1 - - - - /system.slice/sshd.service 1 - - - - /system.slice/system-getty.slice/[email protected] 1 - - - - /system.slice/systemd-journald.service 1 - - - - /system.slice/systemd-logind.service 1 - - - - /system.slice/systemd-udevd.service 1 - - - - /system.slice/tuned.service 1 - - - - /system.slice/vboxadd-service.service 1 - - - - /user.slice/user-1000.slice/session-4.scope 4 - - - -
大ããåããã¨system.sliceã¨user.sliceã£ã¦ã®ãããã/sys/fs/cgroup/systemdãã«ã¼ããã
systemd-cglsã§cgroupã®ä½¿ããæ¹ãè¦ããã¨ãã§ããã
[vagrant@localhost ~]$ systemd-cgls ââ1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23 ââuser.slice â ââuser-1000.slice â ââsession-4.scope â ââ2407 sshd: vagrant [priv] â ââ2410 sshd: vagrant@pts/0 â ââ2411 -bash â ââ2471 systemd-cgls â ââ2472 systemd-cgls ââsystem.slice ââpolkit.service â ââ747 /usr/lib/polkit-1/polkitd --no-debug ââauditd.service â ââ501 /sbin/auditd -n ââsystemd-udevd.service â ââ455 /usr/lib/systemd/systemd-udevd ââlvm2-lvmetad.service â ââ440 /usr/sbin/lvmetad -f ââsystemd-journald.service â ââ426 /usr/lib/systemd/systemd-journald ââdbus.service â ââ543 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation ââsystemd-logind.service â ââ542 /usr/lib/systemd/systemd-logind ââsshd.service â ââ1109 /usr/sbin/sshd -D :
åé ã§è§¦ããæåã確èªãããããã¡ãã£ã¨ã½ã¼ã¹ã³ã¼ããçºãããsystemdæ¬ä½ã¯src/core以ä¸ãªã®ããªããµã¼ãã¹ã¦ãããã®ä¸ãä¸ãã¯src/core/service.cã¨ãsrc/core/unit.cãããããªã確ãã«SysVinitã§ã·ã§ã«ã¹ã¯ãªããã§å®è£ ããã¦ããåãå ¨é¨Cã§æ¸ããã¦ãããããããããã«ããã¯ããã°ãã§ã³ã¸ã ãªãã
service_stop()ãsystemctl stopã§å¼ã°ããé¢æ°ãã¦ããããã¨ã«ç¶æ é·ç§»ãã·ã³ã«ãªã£ã¦ãã¦ãservice_enter_stop()ã§ExecStopãservice_enter_stop_post()ã§ExecStopPostã«ç»é²ãããã³ãã³ããé ã«å®è¡ãããã³ãã³ãã®å®è¡ã«å¤±æããå ´åã¯ãservice_enter_signal()ãçµç±ãã¦unit_kill_context()ã§ããã»ã¹ã«SIGTERMãæãããããã§ãæ»ãªãªãããã»ã¹ã¯watchdogã§ååãããåæ§ã«unit_kill_context()ã§SIGKILLãæããã
unit_kill_context()ãåç
§ããKillContextã«ã¯kill_modeã¨ããã¡ã³ãå¤æ°ããããã¦ãããã¯KILL_CONTROL_GROUPã«åæåããã¦ããï¼SysVinitäºæã®ã±ã¼ã¹ã¯KILL_PROCESSã«ãªã£ã¦ããï¼ãunit_kill_context()ã§ã¯cg_kill_recursive()ãå¼ãã§ãcgroupã®ããã»ã¹ã«ã·ã°ãã«ãæããã
cg_*é¢æ°ã®å®ç¾©ã¯src/shared/cgroup-util.cãcgroupã®å®è£
ããã¡ã¤ã«ã·ã¹ãã ã¨ããã®ããããããã