Linux
如何將程序從一個命名空間移動到另一個命名空間?
這個問題類似於我關於如何列出命名空間的問題。所以另外,我想知道一些關於將程序從一個命名空間移動到另一個命名空間的資訊?例如,我在一個命名空間中有目前會話的程序,而
lxc
在不同的命名空間中有一些容器的其他程序,所以我想links
在該容器的 cgroup 中執行(例如)(很容易使用cgexec
),然後將其移動到容器的命名空間,因為我有在容器中執行此過程而不在其中精確執行它。在Linux中可以做到還是不可能?
如果您已經在某個命名空間中,則不需要在某些控制組中執行程序,而是必須使用命名空間進行操作。新命名空間中的所有新程序都將“繼承”與該命名空間相關的所有控制組。
可以使用setns()函式在不同命名空間之間移動程序,也可以使用nsenter命令 from
util-linux
進入新命名空間,然後在其中執行新任務。你只需要知道程序的PID,它已經是新的命名空間,然後你可以使用(如果你想執行links
):# nsenter --PID --target pid_in_ns_you_want_to_enter && links
這是一些作弊,因為你不移動程序,你只是進入命名空間並執行新程序,但是有了這種可能性,你可以進入某些 NS,然後
fork
在它已經在其他 NS 程序中執行。