C++ MONITOR_BASE::MODULE_CPU_INFO 函数:检测进程死亡并清零资源
C++ MONITOR_BASE::MODULE_CPU_INFO 函数:检测进程死亡并清零资源
该函数用于获取指定进程的 CPU、内存和虚拟内存使用情况。它还提供额外的功能:检测进程是否已死亡,并在进程死亡的情况下将对应进程的资源使用数据清零。
代码实现
#include <cstdlib> // 添加头文件来调用系统命令
void MONITOR_BASE::MODULE_CPU_INFO(std::string process_name, float cpu, float mem, float vsz)
{
// 检查进程是否正在运行
std::string check_process_cmd = "pgrep " + process_name;
int process_id = system(check_process_cmd.c_str());
if (process_name == "auto_ad_monitor")
{
cpu_info_.auto_ad_monitor.cpu.data = cpu;
cpu_info_.auto_ad_monitor.mem.data = mem;
cpu_info_.auto_ad_monitor.vsz.data = vsz;
// 如果进程已死亡,则将值清零
if (process_id != 0) {
cpu_info_.auto_ad_monitor.cpu.data = 0;
cpu_info_.auto_ad_monitor.mem.data = 0;
cpu_info_.auto_ad_monitor.vsz.data = 0;
}
}
if (process_name == "auto_ad_memory_monitor")
{
cpu_info_.auto_ad_memory_monitor.cpu.data = cpu;
cpu_info_.auto_ad_memory_monitor.mem.data = mem;
cpu_info_.auto_ad_memory_monitor.vsz.data = vsz;
// 如果进程已死亡,则将值清零
if (process_id != 0) {
cpu_info_.auto_ad_memory_monitor.cpu.data = 0;
cpu_info_.auto_ad_memory_monitor.mem.data = 0;
cpu_info_.auto_ad_memory_monitor.vsz.data = 0;
}
}
if (process_name == "auto_ad_localization")
{
cpu_info_.auto_ad_localization.cpu.data = cpu;
cpu_info_.auto_ad_localization.mem.data = mem;
cpu_info_.auto_ad_localization.vsz.data = vsz;
// 如果进程已死亡,则将值清零
if (process_id != 0) {
cpu_info_.auto_ad_localization.cpu.data = 0;
cpu_info_.auto_ad_localization.mem.data = 0;
cpu_info_.auto_ad_localization.vsz.data = 0;
}
}
if (process_name == "auto_ad_planning")
{
cpu_info_.auto_ad_planning.cpu.data = cpu;
cpu_info_.auto_ad_planning.mem.data = mem;
cpu_info_.auto_ad_planning.vsz.data = vsz;
// 如果进程已死亡,则将值清零
if (process_id != 0) {
cpu_info_.auto_ad_planning.cpu.data = 0;
cpu_info_.auto_ad_planning.mem.data = 0;
cpu_info_.auto_ad_planning.vsz.data = 0;
}
}
}
代码解释
- 包含头文件:
#include <cstdlib>用于调用system函数,该函数用于执行系统命令。 - 检查进程状态:使用
pgrep命令来检查进程是否存在。pgrep命令返回进程的 ID,如果进程不存在,则返回 0。 - 更新资源数据:如果进程存在,则更新对应进程的 CPU、内存和虚拟内存使用数据。
- 清零数据:如果进程不存在(即进程已死亡),则将对应进程的 CPU、内存和虚拟内存使用数据清零。
注意事项
pgrep命令仅在 Linux 系统中可用。如果使用其他操作系统,请查找相应的命令来替代。- 该方法可能会产生额外的系统开销,尤其是当频繁调用该函数时。
- 为了提高效率,可以考虑使用更轻量级的进程状态检查方法,例如使用
ps命令或其他进程管理库。 - 此外,还可以使用信号处理机制来处理进程死亡事件,以便及时更新数据。
通过这些优化,您就可以实现一个更加稳定可靠的进程监控功能,并及时更新对应进程的资源使用数据。
原文地址: https://www.cveoy.top/t/topic/iVd 著作权归作者所有。请勿转载和采集!