GNU/Linux >> Belajar Linux >  >> Linux

Apa PID di host, dari proses yang berjalan di dalam container Docker?

Jika Anda mengetahui host pid atau container pid, Anda dapat menemukannya dengan menelusuri semua peta NSpid di host seperti ini:

# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
  • 1194200 adalah host pid
  • 10061 adalah pid penampung

2>/dev/null adalah untuk mengabaikan proses berumur pendek yang menyebabkan kesalahan grep seperti ini:grep:/proc/1588467/status:Tidak ada file atau direktori seperti itu


Anda dapat melihat /proc/<pid>/status file untuk menentukan pemetaan antara PID namespace dan PID global. Misalnya, jika dalam wadah buruh pelabuhan saya memulai beberapa sleep 900 proses, seperti ini:

# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &

Saya bisa melihat mereka berjalan di wadah:

/ # 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

Saya dapat melihat ini di 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

Dan untuk salah satunya, saya bisa melihat status file untuk melihat namespace pid:

# grep -i pid /proc/10394/status
Pid:    10394
PPid:   10366
TracerPid:  0
NSpid:  10394   7

Melihat NSpid baris, saya dapat melihat bahwa di dalam namespace PID proses ini memiliki pid 7. Dan memang, jika saya mematikan proses 10394 di host:

# kill 10394

Kemudian di wadah saya melihat bahwa PID 7 tidak lagi berjalan:

/ # 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. Menjalankan buruh pelabuhan di Ubuntu:volume host yang dipasang tidak dapat ditulis dari wadah

  2. Memulai sebuah shell di wadah Docker Alpine

  3. Apa definisi sesi di linux?

  1. Membuat pemasangan NFS pada host terlihat dan baca-tulis di dalam wadah Docker

  2. Variabel lingkungan dari proses yang berjalan di Unix?

  3. OS mana yang berjalan di wadah Docker saya?

  1. Membangun wadah dengan tangan:Ruang nama PID

  2. Bagaimana Menemukan Id Proses (pid) Dari Program Terminal yang Berjalan?

  3. Bagaimana saya bisa terhubung ke Postgres yang berjalan di host Windows dari dalam WSL2?