【问题标题】:API to control Linux daemon用于控制 Linux 守护进程的 API
【发布时间】:2015-08-04 00:51:30
【问题描述】:

我需要的是通过某种 API 来控制 Linux 守护程序的可能性,例如检查某个守护程序是否正在运行、启动/停止/重新启动它等。

是否有任何提供此功能的 Linux 库?

【问题讨论】:

    标签: c++ linux


    【解决方案1】:

    您也可以使用D-BusSNMP。然而,大多数守护进程只是将它们的 PID 写入/var/run/ 下的某个文件并接受SIGTERM 信号以停止,并接受SIGHUP 信号以重新加载其配置文件(通常在/etc/ 下)。

    请注意,如果您采用常规约定,即您的守护程序 mydprog 将其 pid 写入 /var/run/mydprog.pid,则其他程序可以在那里读取该 pid,并使用带有 0 信号的 kill(2) 检查守护进程在跑。您还可以访问/proc/1234/ 下的一些伪文件(其中 1234 是守护进程的 pid),尤其是 /proc/1234/status,请参阅proc(5) 了解更多信息。

    您还可以设计您的守护程序,以便它回答,例如在一些unix(7)tcp(7) 套接字上使用一些JSONRPC 协议,通过提供状态信息来进行一些查询。您可以考虑通过一些 HTTP 服务器库(如 libonion)或任何其他消息传递或远程过程调用协议使用一些 HTTP 协议。

    【讨论】:

      【解决方案2】:

      简短的回答是否定的。
      一些守护进程可能有一个 api,但这将是特定于该守护进程的。
      您可以运行/etc/init.d/<daemon_name> start|stop|status 来启动停止或获取大多数守护进程的状态

      【讨论】:

      • 我希望有比使用 system("...") 更好的方法。所以没有 Linux 通用 API?
      • 您可以使用 POSIX 信号来停止守护进程,但这是我能想到的守护进程控制 API 的最接近的方法。
      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2011-06-19
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      相关资源
      最近更新 更多