从C / C ++应用程序启动systemd服务或调用D-Bus服务

时间:2012-12-12 15:31:09

标签: unix service process dbus systemd

我有一个.service用于进程,我不想在启动时启动,而是在某个时间以某种方式从另一个已在运行的应用程序中调用它。

另一种选择是在/ usr / share / dbus-1 / services中放置一个D-Bus(我在我的应用程序中使用glib dbus)服务文件,并以某种方式从我的应用程序中调用它。此外,我也无法做到这一点。

我们说/usr/share/dbus-1/services的dbus服务文件是com.callThis.service 和来自/lib/systemd/system is com.startThis.service

的主要服务文件

如果我从命令行运行一个简单的内省:

/home/root # dbus-send --session --type=method_call --print-reply \
--dest=com.callThis  /com/callThis org.freedesktop.DBus.Introspectable.Introspect

将调用D-Bus服务文件,它将启动Exec(com.starThis)中的内容。问题是我想使用D-Bus glib从C / C ++代码实现这一点。

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

我很难做同样的事情。发现:G_BUS_NAME_WATCHER_FLAGS_AUTO_START解决此问题。

g_bus_watch_name(G_BUS_TYPE_SYSTEM, "com.mydbus.listen",
      G_BUS_NAME_WATCHER_FLAGS_AUTO_START, xOnNameAppeared, xOnNameVanished,
      this, nullptr);