Jak znaleźć grupę konkretnych procesów?

18

Czy jest jakaś metoda uzyskania cgroupprocesu?

Jedyny pakiet, który znam ( cgroup-bin), po prostu zapewnia pewne manipulacje z cgroups i pozwala zmienić cgroup procesu / listę procesów, ale nie ma możliwości poznania informacji o cgroup danego procesu.

zerospiel
źródło
10
Spróbujps -o cgroup <pid>
Matthew Ife,
5
cat / proc / <pid> / cgroup
c4f4t0r
@MIfe, tak, masz rację, bardzo. Właśnie tego potrzebuję
zerospiel
@ c4f4t0r, twoja metoda nie jest tak dobra, po prostu wyświetla mi wszystkie dostępne kontrolery, ale nie grupę procesów, ale ty też.
zerospiel
@MIfe to prawda, przepraszam, inną opcją jest grep w pliku zadań, na przykład grep <pid> / cgroup / cpuset / app1 / tasks
c4f4t0r

Odpowiedzi:

16

Za pomocą systemd (na przykład PID 3378):

# systemctl status 3378 | grep CGroup
CGroup: /user.slice/user-1000.slice/session-3.scope

Za pomocą 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

Wyszukiwanie w / 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
Rfraile
źródło
Ostatnia komenda będzie pasować, a także dane na temat procesu, którego pid jest 13378, albo 23378, lub 33378, itd.
Patrick Mevzek
8

Najszybszym sposobem wyświetlenia cgroup procesu jest nazwa procesu przy użyciu tego skryptu bash:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup
John Greene
źródło
4
używać pgrep, nieps | grep | awk
Patrick
4

Począwszy od wersji RHEL7 i wyższych, a także w niektórych innych dystrybucjach uważam, że to użycie jest pomocne:

$ systemd-cgtop

Przed użyciem upewnij się, że masz DefaultCPUAccounting=yesw /etc/systemd/system.conf.

Wprowadziłem nawet kilka ulepszeń w skrypcie Egberta, które są nadal przydatne, i skorzystałem z sugestii Patricka 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
Dirk Krijgsman
źródło