解决进程存在性检查问题:使用更可靠的方法
非常抱歉之前的回答仍然无法解决问题,并给您带来困扰。请允许我再次检查您的代码以找到问题所在。
根据您提供的代码和运行结果,我注意到问题在于 '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 著作权归作者所有。请勿转载和采集!