如何使用C、C++编程在Linux上通过指定名称来检查特定守护进程是否正在运行?

4
如何使用C、C ++在Linux上编程检查特定守护程序是否正在运行?

3
你应该查阅systemd的文档。但仅出于好奇,这是一个XY问题吗?根据我的经验,当有人提出这种问题时,实际上他们想做的是其他事情。 - Iharob Al Asimi
1
另外,请注意这样做可能存在安全风险,因为程序需要具有根权限才能查询所需的数据。 - Iharob Al Asimi
也许可以使用类似这样的方法,例如解析“ps aux | grep <daemonname>”命令的输出:https://dev59.com/6XRB5IYBdhLWcg3w4bGv - Erik Alapää
主要取决于您正在运行哪种初始化系统(SysV,systemd,runit等)- 您可能会在[unix.se]网站上获得更多相关的答案。 - Toby Speight
3个回答

1
一个简单的运行命令是 systemctl status ${service} | grep "Active:" | cut -d' ' -f6。捕获上述命令的stdout应该等于(running)
顺便说一句,*ctl仅用于命令行使用,不适用于其他程序使用。与systemd交互的接受方式是使用dbus API。

https://www.freedesktop.org/wiki/Software/systemd/dbus/


0

由于我无法在上面添加评论。 您可以使用systemctl来检查服务状态。

systemctl status servicename

这是终端命令。 使用system("systemctl status servicename"),您可以从C++管理调用。

希望这就是您所寻找的或类似的内容。


1
谢谢!...看起来在我的CentOS中这个命令不可用。它显示以下错误: root@t1024rdb:~# systemctl -sh: systemctl: 命令未找到 - Raju

-2

可以使用systemctl is-active ${service_name}来检查服务是否处于活动状态


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接