किसी विशेष प्रक्रिया के cgroup का पता कैसे करें?


18

क्या cgroupप्रक्रिया प्राप्त करने की कोई विधि है ?

केवल एक पैकेज जो मुझे पता है ( cgroup-bin), बस cgroups के साथ कुछ जोड़तोड़ प्रदान करते हैं और प्रक्रियाओं के cgroup को बदलने की अनुमति देते हैं / प्रक्रियाओं की सूची, लेकिन किसी विशेष प्रक्रिया के cgroup के बारे में जानकारी जानने की कोई क्षमता नहीं।


10
कोशिशps -o cgroup <pid>
मैथ्यू इफ

5
cat / proc / <pid> / cgroup
c4f4t0r

@ इफ़्फ़, हाँ, आप सही हैं, बहुत बहुत। यह वही है जो मुझे चाहिए
zerospiel

@ c4f4t0r, आपका तरीका इतना अच्छा नहीं है, यह सिर्फ मेरे लिए सभी उपलब्ध नियंत्रकों को आउटपुट करता है, लेकिन एक प्रक्रिया के cgroup नहीं, लेकिन आपको भी।
zerospiel

@MIfe यह सच है, क्षमा करें, अन्य विकल्प कार्य फ़ाइल पर grep है, उदाहरण के लिए grep <pid> / cgroup / cpuset / app1 / कार्य
c4f4t0r

जवाबों:


16

सिस्टमड का उपयोग करना (उदाहरण के लिए PID 3378):

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

खरीद का उपयोग:

# 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, आदि
पैट्रिक मेवज़ेक

8

किसी प्रक्रिया के cgroup को देखने का सबसे तेज़ तरीका प्रक्रिया नाम है, इस बैश स्क्रिप्ट का उपयोग करके:

#!/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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.