今天在使用Linux 内核命名空间时遇到了一些困难,特别是将唯一 PID 命名空间内的 PID 与全局 PID 命名空间内的那些相关联
我需要能够执行以下操作之一:
a)使用命名空间分配的 PID 从全局范围中杀死一个进程
或者
b)将命名空间特定的 PID 转换为全局 PID,这样我就可以从全局范围内终止 PID
或者
c)启用 PID 命名空间内的进程向我报告其全局 PID,这样我就可以从全局范围内终止 PID
这里有一些关于在命名空间场景中包含 PID 信息的进程结构的讨论。我不确定如何/是否可以从用户应用程序访问这些结构,或者我是否需要通过内核 hack 添加支持。
为什么? 我有一个当前使用网络命名空间的应用程序。我正在添加对 PID 命名空间的支持。以下是它目前的工作方式:
在引入 PID 命名空间之前: 主应用程序当前在另一个网络命名空间中启动了一个 bash 控制台。然后它使用该 bash 控制台启动程序并让这些程序报告它们当前的 PID。当主应用程序想要终止该网络命名空间中的子进程时,它只是告诉操作系统终止报告的 PID。
使用 PID 命名空间(损坏状态): 主应用程序当前在另一个网络和 PID 命名空间中启动 bash 控制台。然后它使用该 bash 控制台启动程序并让这些程序报告它们当前的 PID。但是,返回的当前 PID 在全局 PID 命名空间中无效(可能是 10,当全局命名空间中的 PID 为 56000 时)。结果,主应用程序无法杀死该网络 + PID 命名空间中的子进程
一如既往,感谢任何指导