Belirli bir sürecin grubunu nasıl bulabilirim?


18

cgroupİşlem almak için herhangi bir yöntem var mı ?

Bildiğim tek paket ( cgroup-bin), cgroups ile bazı manipülasyonlar sağlar ve süreç / süreç listesinin değiştirilmesine izin verir, ancak belirli bir sürecin cgroup'u hakkında bilgi bilme yeteneği yoktur.


10
Deneps -o cgroup <pid>
Matthew Ife

5
cat / proc / <pid> / cgroup
c4f4t0r 9:30 '

@MIfe, evet, haklısın, çok bağlı. İhtiyacım olan bu
Zerospiel

@ c4f4t0r, yönteminiz o kadar iyi değil, sadece bana mevcut tüm kontrolörleri çıktı, ama bir sürecin grup değil, ama size de bağlı.
zerospiel

@MIfe doğru, üzgünüm, diğer seçenek görevler dosyasında grep, örneğin grep <pid> / cgroup / cpuset / app1 / görevleri
c4f4t0r

Yanıtlar:


16

Systemd'yi kullanma (örneğin PID 3378):

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

Proc kullanma:

# 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 / dizinine bakarken:

# 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

Son komutu kimin pid süreç hakkında iyi veri olarak eşleşir 13378ya 23378ya 33378, vb
Patrick Mevzek

8

Bir sürecin cgroup'unu görüntülemenin en hızlı yolu şu bash betiğini kullanarak işlem adına göre yapmaktır:

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

4
kullanın pgrep, değilps | grep | awk
Patrick

4

RHEL7 ve üstü ve diğer bazı dağıtımlarda bu yardımcı programı yararlı buluyorum:

$ systemd-cgtop

Kullanmadan önce, DefaultCPUAccounting=yesiçinde olduğundan emin olun /etc/systemd/system.conf.

Hatta Egbert'in senaryosunda hala yararlı olan bazı iyileştirmeler yaptım ve Patrick'in önerisini kullanmak için kullandım 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.