Wenn Sie entweder die Host-PID oder die Container-PID kennen, können Sie diese finden, indem Sie alle NSpid-Maps auf dem Host wie folgt durchsuchen:
# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
- 1194200 ist die Host-PID
- 10061 ist die Container-PID
2>/dev/null soll kurzlebige Prozesse ignorieren, die grep-Fehler wie diesen verursachen:grep:/proc/1588467/status:No such file or directory
Sie können sich den /proc/<pid>/status
ansehen Datei, um die Zuordnung zwischen der Namensraum-PID und der globalen PID zu bestimmen. Wenn ich zum Beispiel in einem Docker-Container mehrere sleep 900
starte Prozesse wie folgt:
# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &
Ich kann sehen, wie sie im Container ausgeführt werden:
/ # 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
Ich kann mir diese auf dem Host ansehen:
# 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
Und für jeden davon kann ich mir die status
ansehen Datei, um die Namensraum-PID zu sehen:
# grep -i pid /proc/10394/status
Pid: 10394
PPid: 10366
TracerPid: 0
NSpid: 10394 7
Blick auf die NSpid
Zeile kann ich sehen, dass dieser Prozess innerhalb des PID-Namensraums PID 7 hat. Und tatsächlich, wenn ich den Prozess 10394
beende auf dem Host:
# kill 10394
Dann sehe ich im Container, dass PID 7 nicht mehr läuft:
/ # 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