Si vous connaissez le pid de l'hôte ou le pid du conteneur, vous pouvez le trouver en recherchant toutes les cartes NSpid sur l'hôte comme suit :
# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
- 1194200 est le pid de l'hôte
- 10061 est le pid du conteneur
Le 2>/dev/null consiste à ignorer les processus de courte durée qui provoquent des erreurs de grep comme celle-ci :grep:/proc/1588467/status :No such file or directory
Vous pouvez regarder le /proc/<pid>/status
fichier pour déterminer le mappage entre le PID de l'espace de noms et le PID global. Par exemple, si dans un conteneur docker je démarre plusieurs sleep 900
processus, comme ceci :
# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &
Je peux les voir s'exécuter dans le conteneur :
/ # ps -fe
PID USER TIME COMMAND
1 root 0:00 sh
7 root 0:00 sleep 900
8 root 0:00 sleep 900
9 root 0:00 sleep 900
10 root 0:00 ps -fe
Je peux les consulter sur l'hébergeur :
# ps -fe | grep sleep
root 10394 10366 0 09:11 pts/10 00:00:00 sleep 900
root 10397 10366 0 09:12 pts/10 00:00:00 sleep 900
root 10398 10366 0 09:12 pts/10 00:00:00 sleep 900
Et pour chacun d'entre eux, je peux regarder le status
fichier pour voir le pid de l'espace de noms :
# grep -i pid /proc/10394/status
Pid: 10394
PPid: 10366
TracerPid: 0
NSpid: 10394 7
En regardant le NSpid
ligne, je peux voir que dans l'espace de noms PID, ce processus a le pid 7. Et en effet, si je tue le processus 10394
sur l'hôte :
# kill 10394
Ensuite, dans le conteneur, je vois que le PID 7 ne fonctionne plus :
/ # ps -fe
PID USER TIME COMMAND
1 root 0:00 sh
8 root 0:00 sleep 900
9 root 0:00 sleep 900
11 root 0:00 ps -fe