问题描述
Systemd 为 PAM 模块提供了 pam_systemd.so,对于很多命令,比如 su
命令,pam_systemd.so 会被调用,进程会被调用移至 systemd 管理的 cgroup。
通常,如果我们将 bash 进程从 cgroup
下的 systemd
创建的相关会话 /sys/fs/cgroup/systemd/user.slice
移动到其他某个 cgroup,那么 systemd 会将新的 bash 进程移动到一个新组中执行session-cxxxx.scope
命令后在/sys/fs/cgroup/systemd/user.slice
下命名为su
。
我们想为自己创建的一组进程管理cgroup,如何在不禁用PAM模块中的pam_systemd的情况下防止systemd做这样的例程。
例如
默认的 cgroup 根路径是 /sys/fs/cgroup
。
当手动创建pid为12345和会话ID为99999的'bash'进程时,systemd将在session-99999.scope
下创建目录/sys/fs/cgroup/systemd/user.slice/user-0.slice/
并将进程12345放入其中。
对于cpu或者memory等其他cgroup,进程12345会放在这些以子系统为界的cgroup下的eache user.slice目录下
如果我们将pid为12345的进程从session-99999.scope移动到其他cgroup中,例如:
我们将其从 /sys/fs/cgroup/systemd/user.slice/user-0.slice/session-99999.scope
移至 /sys/fs/cgroup/systemd/
。
对于 cpu 组,我们将其从 /sys/fs/cgroup/cpu/user.slice
移动到 /sys/fs/cgroup/my_test_group
。
然后我们执行'su xxx'命令,创建一个pid为13333的新bash,然后
Systemd 将创建一个名为 session-cxxxxx.scope
的新会话组,例如 session-c10010.scope
下的 /sys/fs/cgroup/systemd/user.slice/user-0.slice/
,并将新进程 13333 放入其中。
对于 cpu 组,新进程 13333 将放入 user.slice 而不是 my_test_group。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)