我使用什么方法来管理特定于应用程序的后台进程?

我使用什么方法来管理特定于应用程序的后台进程?

我正在开发一个根据参数具有不同行为的应用程序:

  • “-config” 启动一个 Gtk 窗口来更改选项、启动和关闭守护进程。
  • “-daemon” 启动一个每隔 X 分钟执行一次操作的后台进程。

我已经知道如何使用 fork/system/exec 等...

但我想知道这种应用的主要逻辑:

  • 当配置改变时重新启动或者刷新守护进程。
  • 仅保留守护进程的一个实例。

我读到过,终止守护进程以重新启动它不是一个干净的方法。
其他应用程序如何做?(ubuntuone、天气预报、rss feed 与通知区域一起工作)

感谢您的帮助。

PS:我不想创建一个系统范围的守护进程,只想创建一个带有后台进程的用户应用程序。

答案1

考虑将通知卸载到系统上!

在现代 GNU/Linux 桌面中与守护进程通信的一般方式是D-总线。为了大大简化它的功能:D-Bus 允许您从守护进程“服务”进程调用函数。您可以轻松地拥有一个refreshConfig()在调用时从文件重新加载配置的函数。

也就是说,你尝试做的具体事情有一个与 Ubuntu 和 GTK+ 更相关的解决方案。设定,您将创建一个配置架构,定义您想要存储的键/值对。完成此操作后,您可以在守护进程中放入类似这样的一行...

mySettings->connect("changed::setting", onSettingChanged);

当任何配置发生变化时,GObject 将唤醒您的守护进程并调用onSettingChanged()。如果您愿意,该函数可以调用其自身的新实例exit(0)。虽然我想不出您需要这样做的代码逻辑原因。

这是使用使用 Python 进行 GSettings. 它应该很容易翻译成 C++。

答案2

您在这里接触到的是海量信息。这个问题称为进程间通信 (IPC),有大量资料可参考,具体取决于您的编程语言、对复杂性的需求等。它包括通过文件通信(是否存在锁定文件是一个简单的变体)、通过命名管道通信以及 Sys V IPC(包括信号量和共享内存)。

对于您来说,我会研究命名管道。

相关内容