非常抱歉之前的回答仍然无法解决问题,并给您带来困扰。请允许我再次检查您的代码以找到问题所在。

根据您提供的代码和运行结果,我注意到问题在于 'checkProcessExists()' 函数中的实现方式。您使用的 '/proc/[pid]/stat' 文件来检查进程的存在性,但是该方法不够准确,因为进程的状态可能会发生变化。

为了解决这个问题,我建议您使用更可靠的方法来检查进程的存在性。您可以使用 'kill()' 函数来发送一个特殊的信号 '0' 给进程,如果进程存在,则 'kill()' 函数会成功发送信号,否则会返回错误。

以下是修改后的示例代码:

bool MONITOR_BASE::checkProcessExists(const std::string& process_name)
{
    std::string command = "pidof -s " + process_name;
    std::string result = execCommand(command);

    return !result.empty();
}

std::string MONITOR_BASE::execCommand(const std::string& command)
{
    std::array<char, 128> buffer;
    std::string result;
    std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(command.c_str(), "r"), pclose);

    if (!pipe)
    {
        return result;
    }

    while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr)
    {
        result += buffer.data();
    }

    if (!result.empty() && result.back() == '\n')
    {
        result.pop_back();
    }

    return result;
}

在这个修改后的示例代码中,我们使用了 'pidof -s' 命令来检查进程的存在性。'pidof -s' 命令会找到与给定进程名匹配的进程ID,并将其输出。

另外,我们还添加了一个辅助函数 'execCommand()',用于执行命令并获取其输出。

请确保在调用 'checkProcessExists()' 函数时传递正确的进程名。

希望这次的回答能够解决问题。非常抱歉之前的错误回答给您带来的困惑。如果您还有任何其他问题,请随时提问。

解决进程存在性检查问题:使用更可靠的方法

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

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