【问题标题】:Creating multiple daemons in C Linux and communicating between them在 C Linux 中创建多个守护进程并在它们之间进行通信
【发布时间】:2017-11-06 14:03:40
【问题描述】:

我正在使用 Linux Ubuntu 来创建守护进程。我参考了以下教程来了解使用 fork 和 setid 的守护程序代码的基本实现:

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

我有一个应用程序,我必须在其中创建多个守护进程并在它们之间进行通信。

例如: 我有 3 个源文件,我想将它们作为 3 个不同的守护进程。我在这些源文件中定义了函数,我想从 main() 或其他源文件中调用它们。

  1. 究竟应该如何创建多个守护进程,即每个单独的源文件都充当单独的守护进程? (我在这里可能错了,但我打算为这些文件函数的函数创建线程,该函数将有自己的 PID,然后我执行 fork 和 setid 以及其余进程在这里创建一个守护进程,这可能会创建个人多个守护进程?)

  2. 我应该如何管理这些守护进程之间的通信? 例如:如果我想从源文件中调用某个函数,并且该源文件是一个守护进程,那么我应该如何从该守护进程中调用一个函数?

我正在互联网上搜索有关多个守护进程及其相互通信的信息,但如果有人可以帮助我,那就太好了。

谢谢。

【问题讨论】:

  • 查找“fork and exec”并遵循众多食谱之一。
  • 编写三个不同的程序,每个程序都有一个主程序。当你执行这些成为三个进程。您可以使用消息队列在这些进程之间传输数据。
  • 上面建议的两种解决方案都可以正常工作。我创建了单独的程序,每个程序都有一个主程序,并将它们中的每一个都作为单独的守护进程。除了使用信号外,我还可以中断进程并使用 ZeroMQ 进行数据传输。使用 fork 和 execvp 的方法也可以创建多个守护进程。感谢您的建议.. 它工作了

标签: c linux process daemon communication


【解决方案1】:

如果你是目标Linux,我会建议你让恶魔功能由init系统处理(例如systemd)。

要在您的程序之间进行通信,您可以使用命名管道https://linux.die.net/man/4/fifo

【讨论】:

  • 你好,我去看看管道通讯。但我的疑问是如何将我的源文件/函数创建为守护进程?如果我在主文件中有一些代码或在主文件中有一些函数,那么我可以创建一个守护进程,但是我有多个源文件(有很多函数声明),如何将每个源文件或一些函数作为单独的守护进程?感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多