Pokud znáte buď hostitelské pid nebo kontejnerové pid, můžete je najít prohledáním všech map NSpid na hostiteli takto:
# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
- 1194200 je hostitelské pid
- 10061 je kontejner pid
2>/dev/null je ignorovat krátkodobé procesy, které způsobují chyby grep, jako je tato:grep:/proc/1588467/status:Žádný takový soubor nebo adresář
Můžete se podívat na /proc/<pid>/status
k určení mapování mezi PID jmenného prostoru a globálním PID. Pokud například v kontejneru dockeru spustím několik sleep 900
procesy, jako je tento:
# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &
Vidím, jak běží v kontejneru:
/ # 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
Můžu se na to podívat na hostiteli:
# 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
A pro kterýkoli z nich se mohu podívat na status
soubor, abyste viděli jmenný prostor pid:
# grep -i pid /proc/10394/status
Pid: 10394
PPid: 10366
TracerPid: 0
NSpid: 10394 7
Při pohledu na NSpid
řádek, vidím, že v rámci jmenného prostoru PID má tento proces pid 7. A skutečně, když zabiju proces 10394
na hostiteli:
# kill 10394
Pak v kontejneru vidím, že PID 7 již neběží:
/ # 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