Есть ли способ получить cgroup
процесса?
Единственный пакет, который я знаю (cgroup-bin
), просто предоставьте некоторые манипуляции с контрольными группами и разрешите изменять контрольную группу процесса / список процессов, но не возможности знать информацию о контрольной группе конкретного процесса.
Используя systemd (например, PID 3378):
# systemctl status 3378 | grep CGroup
CGroup: /user.slice/user-1000.slice/session-3.scope
Используя proc:
# cat /proc/3378/cgroup
10:memory:/user.slice/user-1000.slice
9:blkio:/user.slice/user-1000.slice
8:net_cls,net_prio:/
7:cpu,cpuacct:/user.slice/user-1000.slice
6:perf_event:/
5:freezer:/
4:cpuset:/
3:pids:/user.slice/user-1000.slice
2:devices:/user.slice/user-1000.slice
1:name=systemd:/user.slice/user-1000.slice/session-3.scope
Заглянем в / sys /:
# cd /sys/fs/ && find * -name "*.procs" -exec grep 3378 {} /dev/null \; 2> /dev/null
cgroup/memory/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/blkio/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/net_cls,net_prio/cgroup.procs:3378
cgroup/cpu,cpuacct/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/perf_event/cgroup.procs:3378
cgroup/freezer/cgroup.procs:3378
cgroup/cpuset/cgroup.procs:3378
cgroup/pids/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/devices/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/systemd/user.slice/user-1000.slice/session-3.scope/cgroup.procs:3378
Самый быстрый способ просмотреть контрольную группу процесса - по имени процесса, используя этот сценарий bash:
#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup
В RHEL7 и выше, а также в некоторых других дистрибутивах я считаю полезной эту утилиту:
$ systemd-cgtop
Перед его использованием убедитесь, что у вас есть DefaultCPUAccounting=yes
в /etc/systemd/system.conf
.
Я даже внес некоторые улучшения в сценарий Эгберта, который все еще полезен, и использовал предложение Патрика использовать pgrep
:
#!/bin/bash
echo "PID SLICE SERVICE"
for THISPID in `pgrep $1`; do
SLICE=$(cat /proc/$THISPID/cgroup | grep '^1:' | awk -F/ '{ print $2 }')
SERVICE=$(cat /proc/$THISPID/cgroup | grep '^1:' | awk -F/ '{ print $3 }')
echo "$THISPID $SLICE $SERVICE"
done