Як з’ясувати групу певного процесу?


18

Чи є якийсь спосіб отримати cgroupпроцес?

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


10
Спробуйтеps -o cgroup <pid>
Matthew Ife

5
cat / proc / <pid> / cgroup
c4f4t0r

@MIfe, так, ти маєш рацію, дуже сильно ти. Це те, що мені потрібно
zerospiel

@ c4f4t0r, ваш метод не настільки хороший, він просто видає мені всі доступні контролери, але не cgroup процесу, але введіть і вас.
Zerospiel

@MIfe це правда, вибачте, інший варіант - grep на файл завдань, наприклад grep <pid> / cgroup / cpuset / app1 /
task

Відповіді:


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

Остання команда буде відповідати , а також даних про процес якого ПИД- 13378або 23378, або 33378, і т.д.
Патрік Mevzek

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.