PID Namespace
Temel Bilgiler
PID (Process IDentifier) namespace, Linux çekirdeğinde, bir grup sürecin kendi benzersiz PID'lerine sahip olmasını sağlayarak süreç izolasyonu sağlayan bir özelliktir. Bu, süreç izolasyonunun güvenlik ve kaynak yönetimi için hayati olduğu konteynerleştirmede özellikle yararlıdır.
Yeni bir PID namespace oluşturulduğunda, o namespace içindeki ilk süreç PID 1 ile atanır. Bu süreç, yeni namespace'in "init" süreci haline gelir ve namespace içindeki diğer süreçleri yönetmekten sorumludur. Namespace içinde oluşturulan her bir sonraki süreç, o namespace içinde benzersiz bir PID alır ve bu PID'ler diğer namespace'lerdeki PID'lerden bağımsızdır.
Bir PID namespace içindeki bir süreç açısından, yalnızca aynı namespace içindeki diğer süreçleri görebilir. Diğer namespace'lerdeki süreçlerden haberdar değildir ve geleneksel süreç yönetim araçları (örneğin, kill
, wait
, vb.) kullanarak onlarla etkileşimde bulunamaz. Bu, süreçlerin birbirine müdahale etmesini önlemeye yardımcı olan bir izolasyon seviyesi sağlar.
Nasıl çalışır:
Yeni bir süreç oluşturulduğunda (örneğin,
clone()
sistem çağrısı kullanılarak), süreç yeni veya mevcut bir PID namespace'ine atanabilir. Yeni bir namespace oluşturulursa, süreç o namespace'in "init" süreci olur.Çekirdek, yeni namespace'deki PID'ler ile ana namespace'deki (yani yeni namespace'in oluşturulduğu namespace) karşılık gelen PID'ler arasında bir eşleme tutar. Bu eşleme, çekirdeğin gerekli olduğunda PID'leri çevirmesine olanak tanır, örneğin farklı namespace'lerdeki süreçler arasında sinyaller gönderirken.
Bir PID namespace içindeki süreçler yalnızca aynı namespace içindeki diğer süreçleri görebilir ve onlarla etkileşimde bulunabilir. Diğer namespace'lerdeki süreçlerden haberdar değillerdir ve PID'leri kendi namespace'lerinde benzersizdir.
Bir PID namespace yok edildiğinde (örneğin, namespace'in "init" süreci çıktığında), o namespace içindeki tüm süreçler sonlandırılır. Bu, namespace ile ilişkili tüm kaynakların düzgün bir şekilde temizlenmesini sağlar.
Laboratuvar:
Farklı Namespace'ler Oluşturma
CLI
Yeni bir /proc
dosya sisteminin örneğini --mount-proc
parametresini kullanarak monte ederek, yeni montaj ad alanının o ad alanına özgü süreç bilgilerini doğru ve izole bir şekilde görmesini sağlarsınız.
Docker
Hangi ad alanında olduğunuzu kontrol edin
Tüm PID ad alanlarını bul
Başlangıç (varsayılan) PID ad alanındaki root kullanıcısının, yeni PID ad alanlarındaki süreçler de dahil olmak üzere tüm süreçleri görebileceğini unutmayın, bu yüzden tüm PID ad alanlarını görebiliyoruz.
Bir PID ad alanına girin
PID ad alanına varsayılan ad alanından girdiğinizde, tüm süreçleri görebilirsiniz. Ve o PID ns'deki süreç, PID ns'deki yeni bash'i görebilecektir.
Ayrıca, başka bir süreç PID ad alanına yalnızca root iseniz girebilirsiniz. Ve bir tanımlayıcı olmadan başka bir ad alanına giremezsiniz (örneğin /proc/self/ns/pid
gibi).
References
Last updated