Как узнать группу конкретного процесса?


18

Есть ли способ получить cgroupпроцесс?

Единственный пакет, который я знаю ( cgroup-bin), просто обеспечивает некоторые манипуляции с cgroups и позволяет изменять cgroup процесса / списка процессов, но не имеет возможности узнать информацию о cgroup определенного процесса.


10
Попробуйтеps -o cgroup <pid>
Мэтью Ифе

5
cat / proc / <pid> /
cgroup

@ Да, да, ты прав, ты очень. Это то, что мне нужно
zerospiel

@ c4f4t0r, твой метод не так хорош, он просто выводит мне все доступные контроллеры, но не cgroup процесса, а ты тоже.
zerospiel

@Mife это правда, извините, другой вариант - это grep для файла задач, например, grep <pid> / cgroup / cpuset / app1 / tasks
c4f4t0r

Ответы:


16

Используя 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

Последняя команда также будет соответствовать данным о процессе, pid которого 13378, или 23378, или 33378, и т. Д.
Патрик Мевзек

8

Самый быстрый способ просмотра группы процессов - по имени процесса, используя этот скрипт bash:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup

4
использовать pgrep, а неps | grep | awk
Патрик

4

Начиная с 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.