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

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

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

这可能吗?

我正在使用 Linux OpenWRT。

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

感谢您的帮助

【问题讨论】:

    标签: sockets unix udp ipc openwrt


    【解决方案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 已关闭命名管道并将其删除。希望有帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多