修复进程存在时 CPU 信息错误赋值问题
非常抱歉给您带来的困扰。我检查了之前提供的代码,并发现了一个错误。在更新 'cpu_info_' 值时,我错误地使用了递增操作,导致无论进程是否存在,'cpu_info_' 的值都会被设置为0。对此我深表歉意。
为了修复这个问题,我们需要根据进程是否存在,选择适当地设置 'cpu_info_' 的值。下面是修改后的 'clear_cpu_info_()' 函数的示例代码:
#include <cstdio>
#include <iostream>
void MONITOR_BASE::clear_cpu_info_()
{
static bool process_exists = false;
static int prev_cpu_data = 0, prev_mem_data = 0, prev_vsz_data = 0;
std::string process_name = "auto_ad_memory_monitor";
std::string check_process_cmd = "pidof " + process_name;
FILE* pipe = popen(check_process_cmd.c_str(), "r");
char buffer[128];
std::string result = "";
while (fgets(buffer, sizeof(buffer), pipe) != nullptr)
{
result += buffer;
}
pclose(pipe);
if (!result.empty())
{
// 进程存在
process_exists = true;
cpu_info_.auto_ad_memory_monitor.cpu.data = prev_cpu_data + 1;
cpu_info_.auto_ad_memory_monitor.mem.data = prev_mem_data + 1;
cpu_info_.auto_ad_memory_monitor.vsz.data = prev_vsz_data + 1;
}
else
{
// 进程不存在
if (process_exists)
{
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;
}
}
// 保存当前的 cpu_info_ 值
prev_cpu_data = cpu_info_.auto_ad_memory_monitor.cpu.data;
prev_mem_data = cpu_info_.auto_ad_memory_monitor.mem.data;
prev_vsz_data = cpu_info_.auto_ad_memory_monitor.vsz.data;
}
在这个修改后的代码中,我们根据进程是否存在选择适当地设置 'cpu_info_' 的值。如果进程存在,我们将 'cpu_info_' 的值设置为上一次的值加1,表示持续增加。如果进程不存在,我们只在进程从存在状态变为不存在状态时将 'cpu_info_' 的值清零。
希望这个修改后的代码能够正确实现您的需求。再次非常抱歉给您带来的困扰,如果还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/kwf 著作权归作者所有。请勿转载和采集!