Wie finde ich die Gruppe eines bestimmten Prozesses heraus?

17

Gibt es eine Methode, um den cgroupProzess zu beenden ?

Das einzige Paket, das ich kenne ( cgroup-bin), bietet nur einige Manipulationen mit cgroups und erlaubt das Ändern von cgroup von Prozessen / Liste von Prozessen, aber keine Fähigkeiten, Informationen über cgroup eines bestimmten Prozesses zu kennen.

Nullspiel
quelle
9
Versuchen Sieps -o cgroup <pid>
Matthew Ife
5
cat / proc / <pid> / cgroup
c4f4t0r
@MIfe, ja, du hast recht, sehr viel. Dies ist, was ich brauche
Zerospiel
@ c4f4t0r, deine Methode ist nicht so gut, sie gibt nur alle verfügbaren Controller an mich aus, aber nicht die Gruppe eines Prozesses, sondern dich auch.
Zerospiel
@MIfe das ist wahr, sorry, andere Option ist grep auf Tasks-Datei, zum Beispiel grep <pid> / cgroup / cpuset / app1 / tasks
c4f4t0r

Antworten:

15

Verwendung von systemd (z. B. PID 3378):

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

Mit 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

Ein Blick in / 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
quelle
Der letzte Befehl würde auch Daten über den Prozess abgleichen 13378, dessen PID oder 23378oder 33378usw. ist.
Patrick Mevzek
8

Mit dem folgenden Bash-Skript können Sie die C-Gruppe eines Prozesses am schnellsten anhand des Prozessnamens anzeigen:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup
John Greene
quelle
4
verwenden pgrep, nichtps | grep | awk
Patrick
4

Ab RHEL7 und höher und in einigen anderen Distributionen finde ich diese Anwendung hilfreich:

$ systemd-cgtop

Stellen Sie vor der Verwendung sicher, dass Sie DefaultCPUAccounting=yesin /etc/systemd/system.conf.

Ich habe sogar einige Verbesserungen an Egberts Skript vorgenommen, die immer noch nützlich sind, und habe Patricks Vorschlag verwendet 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
quelle