特定のプロセスのcgroupを見つける方法は?


17

cgroupプロセスを取得する方法はありますか?

私が知っている唯一のパッケージ(cgroup-bin)、cgroupで操作を提供し、プロセスのcgroup /プロセスのリストを変更できるようにしますが、特定のプロセスのcgroupに関する情報を知る機能はありません。


9
試してくださいps -o cgroup <pid>
マシューイフェ

5
cat / proc / <pid> / cgroup
c4f4t0r

@MIfe、はい、あなたは正しいです、ty。これは私が必要なものである
zerospiel

@ c4f4t0r、あなたの方法はそれほど良くありません、それは私にすべての利用可能なコントローラを出力しますが、プロセスのcgroupではなく、あなたもタイにします。
zerospiel

@MIfeそれは本当です、申し訳ありませんが、他のオプションはタスクファイルのgrepです。たとえば、grep <pid> / cgroup / cpuset / app1 / tasks
c4f4t0r

回答:


15

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

最後のコマンドは、そのpidのあるプロセスについてもデータとしてマッチする13378、または23378、または33378、など
パトリックMevzek

8

プロセスのcgroupを表示する最も簡単な方法は、次の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

私はEgbertのスクリプトにいくつかの改善を加えましたが、それはまだ有用であり、使用するPatrickの提案を使用しました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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.