[gull] Truc et astuces: [OpenVZ] A qui appartient un process

Félix Hauri felix at f-hauri.ch
Fri Sep 24 09:34:44 CEST 2010


Bonjour,

Afin de déterminer à qui (quel container OpenVZ) appartient une tâche
donnée, un simple ``ps'' ou ``top'' ne suffit pas:

$ ps -C sshd
  PID TTY          TIME CMD
 8333 ?        00:00:03 sshd
10057 ?        00:00:00 sshd
10094 ?        00:00:00 sshd

Bien, j'ai trois serveurs SSH qui tournent... Donc (en root!):
# stat -c %N `printf " /proc/%d/root" \`ps -C sshd ho pid\` ` |
    sed -e "s/^.*roc\/\([0-9]*\)\/.*-> \`\(.*\)'$/\1\t\2/;
            s@`sed -ne '/VE_ROOT/{s/^.*=\(.*\)$V.*$/\1/;p}' /etc/vz/vz.conf `@@"
8333    /
10057   100
10094   102

Qui aurrait pu s'écrire:
# stat -c %N $(printf " /proc/%d/root" $(ps -C sshd ho pid)) |
     sed -e "s/^.*roc\/\([0-9]*\)\/.*-> \`\(.*\)'$/\1\t\2/;
         s@$(sed -ne '/VE_ROOT/{s/^.*=\(.*\)$V.*$/\1/;p}' /etc/vz/vz.conf)@@"
8333    /
10057   100
10094   102

Pour être plus clair:
# eval $(grep ^VE_ROOT= /etc/vz/vz.conf)
# echo $VE_ROOT 
/var/lib/vz/root/

# pids=$(ps -C sshd ho pid)
# echo $pids
8333 10057 10094

# stat -c %N $(printf " /proc/%d/root" $pids)
`/proc/8333/root' -> `/'
`/proc/10057/root' -> `/var/lib/vz/root/100'
`/proc/10094/root' -> `/var/lib/vz/root/102'

... Le reste, c'est de la ``cosmetique'':
# stat -c %N $(printf " /proc/%d/root" $pids) |
     sed -e "s/^.*roc\/\([0-9]*\)\/.*-> \`\(.*\)'$/\1\t\2/;
             s@$VE_ROOT@@;"
8333    /
10057   100
10094   102

--
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list