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