如何通过使用 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 ': ***.com/questions/478898/… 很大程度上取决于您正在运行的初始化系统(SysV、systemd、runit 等) - 您可以在 Unix & Linux 网站上获得更明智的答案。 【参考方案1】:

一个简单的运行命令是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++版本,默认使用老版本编译)

C++进阶教程:如何获取用户输入

如何通过 Makefile 将 cap_net_raw 功能添加到 Linux 上的 c++ 可执行文件

如何使用CMake构建c++项目

通过编译器环境变量或 C 和 C++ 中的命令行标志指定库路径?

如何将 c、c++ 和 python 代码编译为“Released/Final”版本? [关闭]