GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie lautet die PID im Host eines Prozesses, der in einem Docker-Container ausgeführt wird?

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

Linux
  1. Technologievorschau:Ausführen eines Containers in einem Container

  2. Leiten Sie den Host-Port an den Docker-Container weiter

  3. Wie kann festgestellt werden, ob ein Prozess in lxc/Docker ausgeführt wird?

  4. Docker auf Ubuntu ausführen:Das gemountete Host-Volume kann nicht vom Container aus beschrieben werden

  5. Starten einer Shell im Container Docker Alpine

Container von Hand bauen:Der PID-Namespace

Wie führe ich einen Befehl in einem laufenden Systemd-Container aus?

Wie finde ich die Prozess-ID (PID) eines laufenden Terminalprogramms?

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

So überprüfen Sie, ob der Docker-Daemon oder ein Container ausgeführt wird

SIGTERM vs. SIGKILL:Was ist der Unterschied?