PID Namespace
基本情報
PID(プロセス識別子)ネームスペースは、Linuxカーネルの機能であり、一群のプロセスが他のネームスペースのPIDとは独立した一意のPIDセットを持つことを可能にすることで、プロセスの分離を提供します。これは、プロセスの分離がセキュリティとリソース管理に不可欠なコンテナ化に特に役立ちます。
新しいPIDネームスペースが作成されると、そのネームスペース内の最初のプロセスにはPID 1が割り当てられます。このプロセスは新しいネームスペースの「init」プロセスとなり、そのネームスペース内の他のプロセスを管理する責任があります。ネームスペース内で作成される各後続プロセスは、そのネームスペース内で一意のPIDを持ち、これらのPIDは他のネームスペースのPIDとは独立しています。
PIDネームスペース内のプロセスの視点からは、同じネームスペース内の他のプロセスしか見ることができません。他のネームスペース内のプロセスには気づかず、従来のプロセス管理ツール(例:kill
、wait
など)を使用してそれらとやり取りすることはできません。これにより、プロセスが互いに干渉するのを防ぐ一定の分離レベルが提供されます。
動作原理:
新しいプロセスが作成されると(たとえば、
clone()
システムコールを使用して)、そのプロセスは新しいまたは既存のPIDネームスペースに割り当てることができます。新しいネームスペースが作成されると、そのプロセスはそのネームスペースの「init」プロセスとなります。カーネルは、新しいネームスペース内のPIDと親ネームスペース(つまり、新しいネームスペースが作成されたネームスペース)内の対応するPIDとのマッピングを維持します。このマッピングにより、異なるネームスペース内のプロセス間でシグナルを送信する必要がある場合など、カーネルがPIDを変換できるようになります。
PIDネームスペース内のプロセスは、同じネームスペース内の他のプロセスしか見ることができず、それらとやり取りすることができます。他のネームスペース内のプロセスには気づかず、そのPIDはネームスペース内で一意です。
PIDネームスペースが破棄されると(たとえば、ネームスペースの「init」プロセスが終了すると)、そのネームスペース内のすべてのプロセスが終了します。これにより、ネームスペースに関連するすべてのリソースが適切にクリーンアップされます。
Lab:
異なるネームスペースを作成する
CLI
--mount-proc
パラメータを使用して/proc
ファイルシステムの新しいインスタンスをマウントすることで、新しいマウント名前空間がその名前空間固有のプロセス情報の正確で隔離されたビューを持つことが保証されます。
Docker
あなたのプロセスがどの名前空間にあるかを確認します
すべてのPIDネームスペースを見つける
ルートユーザーは初期(デフォルト)のPIDネームスペースからすべてのプロセスを見ることができます。新しいPIDネームスペース内のプロセスも見ることができるため、すべてのPIDネームスペースを見ることができます。
PIDネームスペースに入る
PIDネームスペースからデフォルトのネームスペースに入ると、すべてのプロセスを見ることができます。そして、そのPIDネームスペースからのプロセスは、PIDネームスペース上の新しいbashを見ることができます。
また、rootユーザーでないと、他のプロセスのPIDネームスペースに入ることはできません。そして、(/proc/self/ns/pid
のような)それを指す記述子なしには、他のネームスペースに入ることはできません。
参考文献
Last updated