【问题标题】:Linux : How to detect a process that consumes the maximum memory and kill it? [closed]Linux:如何检测消耗最大内存的进程并将其杀死? [关闭]
【发布时间】:2023-03-27 11:20:01
【问题描述】:

Linux:如何检测消耗最大内存的进程并使用 std::thread 杀死它?我是 C++ 编码的新手,因此非常感谢使用 C++ 代码来实现该功能的解释。 分配的确切文本是编写一个 C++ 代码来监视设备的内存使用情况,并且它应该知道设备达到了目标最大内存使用情况。当线程检测到这种情况时,它应该能够识别正在占用更多内存的进程并执行以下操作,根据应用程序优先级列表检查进程。如果进程属于低优先级类别,请停止进程并重新启动。否则,通知用户由于识别的进程而发生内存溢出,在用户确认的基础上重新启动。重启应该是设备重启还是进程重启,这将根据导致这种情况的进程的性质来决定 · 详细信息应记录在日志文件中

【问题讨论】:

  • std::thread 应该产生一个线程,而不是杀死一个进程。
  • 显示您尝试过的内容,因此我们感谢作者是解决您问题的主要兴趣,然后我们将为您提供建议或可能的解决方案。如果您是初学者,我建议您寻找更简单的应用程序。
  • 我的意思是内存监控的过程应该发生在后台,所以我必须使用std::thread。要实现的功能是检测一个消耗RAM到致命程度的进程并杀死它
  • 虚拟内存大小还是驻留集大小?如果您可以包含作业的确切文本,那将更容易。你已经知道如何使用 std::thread 了吗?
  • 不,我还没有使用 std::thread。

标签: c++ linux multithreading memory-management process


【解决方案1】:

您可能想查看Linux OOM (Out-of-memory) killer

从此链接:

Linux“oom 杀手”的工作是牺牲一个或多个进程,以便在其他所有方法都失败时为系统释放内存。

因此,从技术上讲,您无需对此做任何事情。 ;-)

但是,如果您仍然想根据自己选择和杀死受害进程的标准自己编写它,您可以创建一个 Linux 服务(始终在后台运行)来执行此操作。示例代码在链接的文章中。

关于您的std::thread 点,如果您已经有一个可执行文件并且想要生成一个专用线程来执行此操作,是的,您也可以这样做。逻辑将简单地移入该线程。

补充阅读:
How to Configure the Linux Out-of-Memory Killer

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多