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;
        }
    }
}

代码解释

  1. 包含头文件:#include <cstdlib> 用于调用 system 函数,该函数用于执行系统命令。
  2. 检查进程状态:使用 pgrep 命令来检查进程是否存在。pgrep 命令返回进程的 ID,如果进程不存在,则返回 0。
  3. 更新资源数据:如果进程存在,则更新对应进程的 CPU、内存和虚拟内存使用数据。
  4. 清零数据:如果进程不存在(即进程已死亡),则将对应进程的 CPU、内存和虚拟内存使用数据清零。

注意事项

  • pgrep 命令仅在 Linux 系统中可用。如果使用其他操作系统,请查找相应的命令来替代。
  • 该方法可能会产生额外的系统开销,尤其是当频繁调用该函数时。
  • 为了提高效率,可以考虑使用更轻量级的进程状态检查方法,例如使用 ps 命令或其他进程管理库。
  • 此外,还可以使用信号处理机制来处理进程死亡事件,以便及时更新数据。

通过这些优化,您就可以实现一个更加稳定可靠的进程监控功能,并及时更新对应进程的资源使用数据。

C++ MONITOR_BASE::MODULE_CPU_INFO 函数:检测进程死亡并清零资源

原文地址: https://www.cveoy.top/t/topic/iVd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录