如何在其他网络命名空间中的子进程与父进程之间正确通信?
Posted
技术标签:
【中文标题】如何在其他网络命名空间中的子进程与父进程之间正确通信?【英文标题】:How to communicate properly between child process in other network namespace and parent process? 【发布时间】:2018-02-02 12:10:31 【问题描述】:我正在使用来自subprocess
的Popen
在网络命名空间中生成一个新进程。我需要在父进程和新生成的子进程之间交换数据。
目前,我通过简单地从stdout
解析来做到这一点,这意味着在我的子进程中,我只需打印我需要传输到父进程的所有内容,然后从父进程中解析它。虽然这种方法有效,但它看起来非常笨拙,而且不支持双向数据交换(子 -> 父和父 -> 子)。
我认为创建一个套接字来在两个进程之间进行通信在我的情况下不起作用,因为父进程位于不同的网络命名空间中。
如何在两个独立的网络命名空间之间实现 IPC?
【问题讨论】:
你能发布一些示例代码吗?特别是,您如何在新命名空间中生成子进程?在调用subprocess.Popen
之前,您是在Python 中执行此操作,还是通过ip netns exec
或nsenter
之类的方式执行此操作?
【参考方案1】:
除非您的命名空间之间存在路由,否则 AF_INET 系列的套接字将无法连接,但您可以使用 unix 域套接字 (socket.AF_UNIX
)。他们不使用任何网络命名空间,因为套接字是文件系统上的“文件”。
【讨论】:
以上是关于如何在其他网络命名空间中的子进程与父进程之间正确通信?的主要内容,如果未能解决你的问题,请参考以下文章