linux – 如何将进程从一个名称空间移动到其他名称空间?教程
这个问题类似于我关于how to list namespaces的问题.所以另外,我想知道一些关于将进程从一个名称空间移动到另一个名称空间的信息吗?例如.我在一个命名空间中有当前会话的进程,并且在不同的命名空间中有一些lxc容器的其他进程,所以我想在该容器的cgroup中运行(例如链接)(它很容易用cgexec),然后将它移动到容器的命名空间,因为我必须在容器中运行此过程而不执行它.它可以在Linux中完成还是不可能?
解决方法:
如果已经在某个命名空间中,则不需要在某些控制组中运行进程,而是必须使用命名空间进行操作.新命名空间中的所有新进程将“继承”与该命名空间相关的所有控制组.
可以使用setns()函数在不同名称空间之间移动进程,也可以使用util-linux中的nsenter命令输入新名称空间,然后在其中运行新任务.你需要的只是知道进程的PID,它已经是新的命名空间,然后你可以使用(如果你想运行链接):
# nsenter --PID --target pid_in_ns_you_want_to_enter && links
这是一些欺骗,因为你没有移动进程,你只是输入命名空间并运行新进程,但有了这种可能性,你可以进入某个NS,然后在已经在其他NS进程中运行它.