web-dev-qa-db-ja.com

プロセスをある名前空間から別の名前空間に移動するにはどうすればよいですか?

この質問は、 名前空間を一覧表示する方法 に関する私の質問に似ています。さらに、ある名前空間から別の名前空間へのプロセスの移動に関する情報を知りたいですか?例えば。ある名前空間に現在のセッションのプロセスがあり、別の名前空間にlxcコンテナの他のプロセスがあるので、そのコンテナのcgroupで(たとえばlinks)を実行して(cgexecで簡単に実行できます)、コンテナの名前空間に移動します。このプロセスを正確に実行せずに、コンテナーで実行する必要があります。 Linuxではできるのか、それとも不可能なのか?

5
zerospiel

すでに特定の名前空間にいる場合は、一部のコントロールグループでプロセスを実行する必要はありません。代わりに、名前空間を操作する必要があります。新しい名前空間のすべての新しいプロセスは、その名前空間に関連するすべてのコントロールグループを「継承」します。

異なる名前空間間でのプロセスの移動は、 setns() 関数を使用して実行するか、util-linuxから nsenter コマンドを使用して新しい名前空間を入力し、その中で新しいタスクを実行できます。 。必要なのは、すでに新しい名前空間であるプロセスのPIDを知ることだけです。その後、使用できます(linksを実行する場合):

# nsenter --PID --target pid_in_ns_you_want_to_enter && links

プロセスを移動しないので、名前空間に入力して新しいプロセスを実行するだけなので、これはごまかしですが、この可能性がある場合は、特定のNS、次にforkに入力できます。すでに他のNSプロセスで実行されています。

1
zerospiel