如何在其他网络命名空间中的子进程与父进程之间正确通信?

Posted

技术标签:

【中文标题】如何在其他网络命名空间中的子进程与父进程之间正确通信?【英文标题】:How to communicate properly between child process in other network namespace and parent process? 【发布时间】:2018-02-02 12:10:31 【问题描述】:

我正在使用来自subprocessPopen 在网络命名空间中生成一个新进程。我需要在父进程和新生成的子进程之间交换数据。

目前,我通过简单地从stdout 解析来做到这一点,这意味着在我的子进程中,我只需打印我需要传输到父进程的所有内容,然后从父进程中解析它。虽然这种方法有效,但它看起来非常笨拙,而且不支持双向数据交换(子 -> 父和父 -> 子)。

我认为创建一个套接字来在两个进程之间进行通信在我的情况下不起作用,因为父进程位于不同的网络命名空间中。

如何在两个独立的网络命名空间之间实现 IPC?

【问题讨论】:

你能发布一些示例代码吗?特别是,您如何在新命名空间中生成子进程?在调用subprocess.Popen 之前,您是在Python 中执行此操作,还是通过ip netns execnsenter 之类的方式执行此操作? 【参考方案1】:

除非您的命名空间之间存在路由,否则 AF_INET 系列的套接字将无法连接,但您可以使用 unix 域套接字 (socket.AF_UNIX)。他们不使用任何网络命名空间,因为套接字是文件系统上的“文件”。

【讨论】:

以上是关于如何在其他网络命名空间中的子进程与父进程之间正确通信?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确销毁 C 中多个进程使用的共享未命名信号量?

C linux中子进程与父进程之间的通信:父进程不阻塞

在循环中创建子进程时如何与父进程进行IPC(Ruby)

操作系统学习--系统调用

理解Docker容器的进程管理

如何通过命名管道传输文件描述符