Se conosci il pid dell'host o il pid del contenitore, puoi trovarlo cercando tutte le mappe NSpid sull'host in questo modo:
# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
- 1194200 è il pid host
- 10061 è il pid del contenitore
Il 2>/dev/null serve a ignorare i processi di breve durata che causano errori grep come questo:grep:/proc/1588467/status:Nessun file o directory simile
Puoi guardare il /proc/<pid>/status
file per determinare la mappatura tra il PID dello spazio dei nomi e il PID globale. Ad esempio, se in un contenitore docker avvio diversi sleep 900
processi, come questo:
# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &
Posso vederli in esecuzione nel contenitore:
/ # 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
Posso guardare questi sull'host:
# 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
E per ognuno di questi, posso guardare il status
file per vedere lo spazio dei nomi pid:
# grep -i pid /proc/10394/status
Pid: 10394
PPid: 10366
TracerPid: 0
NSpid: 10394 7
Guardando il NSpid
linea, posso vedere che all'interno dello spazio dei nomi PID questo processo ha pid 7. E in effetti, se interrompo il processo 10394
sull'host:
# kill 10394
Quindi nel contenitore vedo che PID 7 non è più in esecuzione:
/ # 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