第一个进程保持运行而后续进程仅通过参数的最佳 IPC 方法是啥?

Posted

技术标签:

【中文标题】第一个进程保持运行而后续进程仅通过参数的最佳 IPC 方法是啥?【英文标题】:What is the best IPC method for first process to remain running while subsequent processes pass params only?第一个进程保持运行而后续进程仅通过参数的最佳 IPC 方法是什么? 【发布时间】:2019-04-01 05:29:52 【问题描述】:

我需要开发一个在本地主机上没有其他此类进程运行时启动并继续运行的进程。该进程的后续本地实例(由其他进程产生,即不是分叉的子/父进程)只需执行以某种方式将其命令行参数传递给原始进程进行处理,然后尽快退出。

我知道我需要 IPC 来实现这一点,同时我需要将占用空间和执行速度的开销保持在最低限度,因此这排除了套接字和其他基于网络的 IPC,例如消息队列。 生成的进程需要以某种方式知道主进程。没有跨主机的 IPC 要求。

我正在考虑使用命名管道,但想知道替代方案。例如,通过共享句柄写入文件的匿名管道会更有效吗?

在这种情况下,机制很重要;不是示例中包含的语言和环境。我将在 C 或 C++ 中实现该机制。

【问题讨论】:

什么平台?对于 Windows、Posix 和 RTOS 平台,答案将大不相同。 您是否有显示套接字太慢的性能数据?先让其易于理解,然后再优化。 最终,它将在 Windows 和(旧的)四大 Unix 上运行。我无法确定性能基准,我只需要使其尽可能快。 为什么我不能基线性能?我可以,但我正在开发一些没有人特别想要的东西,因此如果它的性能低于最佳状态,它将被用作其他系统组件性能不佳的替罪羊。例如;如果我使用 System V,有人会抱怨这是一个瓶颈,我应该改用管道。 【参考方案1】:

msgrcv()msgsnd() 的 MAN 页面提供了执行所需操作所需的所有信息。

建议阅读:how to use msgrcv,了解如何使用这些功能的示例。

【讨论】:

在我的操作系统(ubuntu linux)上,两个函数的信息都在同一个 MAN 页面上

以上是关于第一个进程保持运行而后续进程仅通过参数的最佳 IPC 方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

通过进程间通信将停止参数从.NET应用程序传递给服务的最佳技术是啥?

pgrep---以名称为依据从运行进程队列中查找进程

将大字节流缓冲区发送到另一个进程

进程切换switch_to宏第三个参数分析

pgrep命令

从子进程读取的实时标准输出仅在从 PyCharm 而不是终端运行时才有效