Unix - 如何向多个进程发送消息?

Posted

技术标签:

【中文标题】Unix - 如何向多个进程发送消息?【英文标题】:Unix - How can I send a message to multiple processes? 【发布时间】:2014-05-09 16:32:33 【问题描述】:

我有一个进程 A 需要向所有正在运行的 B 类型进程发送消息。进程 A 不知道这些其他进程,它们可以根据外部因素创建和销毁,因此我可以运行不同数量的 B 类进程。

我想我可以在进程 A 中使用 UDP 套接字向端口 P 发送消息,并让我所有类型 B 的进程侦听此端口 P 并接收消息的副本。

这可能吗?

我正在使用 Linux OpenWRT。

我正在尝试使用 LuaSockets,但出现“地址已在使用”错误。好像不能有多个应用监听同一个端口?

感谢您的帮助

【问题讨论】:

【参考方案1】:

如果所有进程都位于一台机器上,那么使用共享内存可能会很有用。

请查看http://man7.org/linux/man-pages/man7/shm_overview.7.html 以获得解释。

简而言之,您将需要主进程来创建一个共享内存区域并将数据写入其中。然后,从属进程可以检查内存区域中的数据,如果它已被更改,则对其进行操作。然而,这只是解决此问题的众多方法之一。您也可以考虑使用管道和三通。

【讨论】:

谢谢,我正在检查这个解决方案。我检查了管道,但我刚刚发现两个进程之间的通信。我不知道tee,我也去看看 当我使用 OpenWRT 时(我刚刚编辑了 mu 问题来指定这一点)它使用 uClib 并且它不支持 shm 函数 =/。如果我使用 tee 我需要指定目的地,但我的进程 A 不知道目的地。 @Lilás 这可以从使用一组命名管道中受益,一个好的技巧是拥有一个管道,当创建新进程 B 时,它将其 PID 写入进程 A 正在读取的管道中。当这种情况发生时,进程 A 必须创建一个以进程 B 的 PID 命名的新命名管道,然后 A 必须连接到新的命名管道,并且进程 B 必须读取它(B 已经知道管道的名称,因为它是 B 的 PID) .最后,当进程 B 关闭时,进程 A 必须监听或 SIGHUP 以显示 B 已关闭命名管道并将其删除。希望有帮助。 :)

以上是关于Unix - 如何向多个进程发送消息?的主要内容,如果未能解决你的问题,请参考以下文章

多个进程之间的消息传递,每个进程在 c 中有许多线程

允许用户在消息应用中同时向多个用户发送消息

如何从终端设备向 loRaWAN 中的多个应用程序服务器发送消息?

Python [子] 进程向节点 [父] 进程发送消息

如何将消息发送给多个收件人

如何使用 python 信号在独立进程之间发送消息?