![如何让系统自动杀死一些进程?](https://linux22.com/image/43449/%E5%A6%82%E4%BD%95%E8%AE%A9%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%8A%A8%E6%9D%80%E6%AD%BB%E4%B8%80%E4%BA%9B%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
有时,我的计算机在同时运行太多程序/进程后开始运行缓慢,有时几乎看起来崩溃/冻结。使用 Debian Linux,有没有办法在内存变得太稀缺而无法顺利运行之前自动终止一些进程?
答案1
基本上,您需要一个守护进程来监视可用内存,如果它低于给定的阈值,它会选择一些进程并杀死它们以释放一些内存。
while (true) {
size_t free_memory = get_free_memory();
if (free_memory < free_memory_threshold) {
pid_t pid = choose_a_process_to_kill();
kill(pid, SIGTERM);
}
}
一个明显的问题是:如何选择要终止的进程?一个简单的答案是内存使用量最大的进程,因为这很可能是行为不当的“内存占用者”,杀死该进程将为许多其他进程释放足够的内存。
然而,一个更根本的问题是:杀死这样的进程来为其他进程释放内存真的可以吗?你怎么知道一个大的过程是不太重要相对于其它的?没有一般性的答案。此外,如果您稍后尝试再次运行该大进程,您会允许它踢出许多其他进程吗?如果你这么做了,就不会有无限循环的复仇?
实际上,虚拟内存机制已经在为你做类似的事情了。它不是杀死进程,而是换出将其内存的某些部分复制到磁盘,以便其他人可以使用它。当前一个进程稍后尝试使用该部分内存时,虚拟内存机制交换页面返回。当这种情况发生时,来自不同的过程有争议(这被称为殴打),您需要终止一些进程以释放内存,或者更好的是,提供更多内存。当系统启动时