进程结束后CPU信息未被清零的解决方案

非常抱歉,之前的解决方案没有解决您的问题。

根据您的描述,进程结束后 cpu_info_ 里的数据没有被清零。这可能是因为在获取进程信息后,clear_cpu_info_ 函数被调用之前,又执行了一次 module_cpu_info 函数,导致数据被更新为进程结束时的值。

为了解决这个问题,您需要在判断进程存在性并清零 cpu_info_ 之前,先保存进程存在性的结果。然后,在调用 module_cpu_info 函数之前,检查进程存在性的结果,只有在进程存在时才更新 cpu_info_ 的数据。

请参考以下修改后的代码:cppvoid MONITOR_BASE::show_cpu_status(){ std::vector process_info = getTopProcesses_CPU(MONITOR_CONSTANT::FIFTY); LOG(INFO) << 'CPU Temperature: ' << getCpuTemperature() << '℃';

for (auto &ele : process_info)    {        if (isSubstring(std::string(std::getenv('AUTO_ROOT')), ele.COMMAND) && ele.COMMAND != '')        {            LOG(INFO) << 'Process(' << getLastElement(ele.COMMAND)                      << ') take CPU(' << ele.CPU                      << '%), MEM(' << ele.MEM                      << '%), VSZ(' << ele.VSZ / 1024 << ' MB)';            std::string process_name = getLastElement(ele.COMMAND);            float cpu = ele.CPU;            float mem = ele.MEM;            float vsz = ele.VSZ;

        bool process_exists = checkProcessExists(process_name);  // 保存进程存在性的结果

        {                std::lock_guard<std::mutex> lock(cpu_info_mutex_);                if (process_exists)  // 只有在进程存在时才更新数据                    module_cpu_info(process_name, cpu, mem, vsz);            }

        if (!process_exists)  // 当进程不存在时进行清零            {                std::lock_guard<std::mutex> lock(cpu_info_mutex_);                clear_cpu_info_(process_name);            }

        pub_memory_.publish(cpu_info_);        }    }}

通过在进程存在性判断结果保存之后,根据这个结果来决定是否调用 module_cpu_info 函数来更新 cpu_info_ 数据,从而避免了进程结束后数据再次被更新的问题。

请尝试使用修改后的代码,并验证是否解决了数据未被清零的问题。如果问题仍然存在,请提供更多上下文信息,以便我们更好地帮助您解决问题。

进程结束后CPU信息未被清零的解决方案

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

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