Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我可以将内核线程从一个名称空间移动到另一个名称空间吗?_Linux_Kernel_Linux Namespaces - Fatal编程技术网

Linux 我可以将内核线程从一个名称空间移动到另一个名称空间吗?

Linux 我可以将内核线程从一个名称空间移动到另一个名称空间吗?,linux,kernel,linux-namespaces,Linux,Kernel,Linux Namespaces,我们的情况是: 首先,我们有一个内核线程,比如KS,它在内核开始运行时开始运行; 然后,当系统准备就绪时,我们创建另一个名称空间,比如NS1,它与LXC具有不同的mntns。 我们的要求是KS需要在只有NS1才能看到的路径中写入内容。所以我在想,我是否可以将KS移动到NS1名称空间,至少更改装载名称空间?如果是,如何进行?我已经检查了setns系统调用及其内核源代码,但仍然不知道如何在用户空间或更改KS源代码,甚至不确定这是否是解决问题的正确方法 我的另一个问题是:我的理解是,内核任务(例如,内

我们的情况是:

首先,我们有一个内核线程,比如KS,它在内核开始运行时开始运行; 然后,当系统准备就绪时,我们创建另一个名称空间,比如NS1,它与LXC具有不同的mntns。 我们的要求是KS需要在只有NS1才能看到的路径中写入内容。所以我在想,我是否可以将KS移动到NS1名称空间,至少更改装载名称空间?如果是,如何进行?我已经检查了setns系统调用及其内核源代码,但仍然不知道如何在用户空间或更改KS源代码,甚至不确定这是否是解决问题的正确方法


我的另一个问题是:我的理解是,内核任务(例如,内核线程感知名称空间)如果在进程上下文中,但我的朋友认为名称空间是一个用户空间概念,所有内核工作人员只知道根名称空间。哪一个是正确的?

不,这不是解决问题的正确方法。从内核线程写入任何名称空间的整个想法都是错误的,如下所述:。在使用setns2系统调用输入所需的装载名称空间后,应该从用户空间执行此操作。setns2手册页有一个示例代码可以实现这一点

另一个问题的答案是你的朋友错了;名称空间的设置和相关处理是在内核内部由内核完成的,因此内核必须知道所有名称空间的一切。每个任务的struct_任务都包含nsproxy struct member,以及指向各自名称空间数据结构的所有相关指针—这些都是仅限内核的数据结构。除了在克隆中请求之外,用户空间实际上对此一无所知。在装载名称空间的情况下,用户进程将获得一个装载表:与父进程相同的装载表,或者如果cloneflags=CLONE_NEWNS请求了一个新的装载名称空间,则为一个私有副本。无论哪种方式,用户进程都只使用它所传递的装载表结构,内核在用户不知道的情况下管理名称空间细节