如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是不是正在运行?
Posted
技术标签:
【中文标题】如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是不是正在运行?【英文标题】:How to programmatically check if particular daemon is runnning by specifying its name on Linux using C, C++?如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是否正在运行? 【发布时间】:2016-12-14 08:44:32 【问题描述】:如何通过在 Linux 上使用 C、C++ 指定其名称以编程方式检查特定守护程序是否正在运行?
【问题讨论】:
你应该搜索 systemd 的文档。但出于好奇,这是XY Problem 吗?根据我的经验,当有人问这种问题时,他们实际上想做其他事情。 另外,请注意,这样做可能会带来安全风险,因为该程序可能必须具有 root 权限才能查询所需的数据。 也许使用类似的东西,例如解析 'ps aux | 的输出grep一个简单的运行命令是systemctl status $service | grep "Active:" | cut -d' ' -f6
。捕获上述命令的标准输出,它应该等于(running)
。
注意,*ctl
仅供命令行使用,不供其他程序使用。公认的方式是使用dbus
API 与systemd
进行交互。
https://www.freedesktop.org/wiki/Software/systemd/dbus/
【讨论】:
【参考方案2】:因为我无法在上面添加评论。 您可以使用 systemctl 来检查服务状态。
systemctl status servicename
这是终端命令。
使用system("systemctl status servicename")
可以管理来自 C++ 的调用。
希望这是正在查看或类似的内容。
【讨论】:
谢谢!....看起来在我的 CentOS 中这个命令不可用。它向我显示以下错误:root@t1024rdb:~# systemctl -sh: systemctl: command not found【参考方案3】:systemctl is-active $service_name 可用于检查服务是否处于活动状态
【讨论】:
以上是关于如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是不是正在运行?的主要内容,如果未能解决你的问题,请参考以下文章
linux如何查看编译器支持的C++版本(支持C++11支持C++14支持C++17支持C++20)(编译时不指定g++版本,默认使用老版本编译)
如何通过 Makefile 将 cap_net_raw 功能添加到 Linux 上的 c++ 可执行文件