进程可能会导致计算机“冻结”,例如在耗尽 CPU 或交换空间时。有没有办法防止这种情况发生?例如,通过设置可以授予进程的最大 %CPU 或 IO MB/s?
答案1
对于从 shell 运行的命令,请阅读 上的 shell 文档ulimit
。
C 中有一个ulimit()
函数可以做同样的事情。
您还可以通过特定于实现的方法应用各种限制。在 FreeBSD 中,您可以在 中设置每个用户的限制login.conf
,或者使用名为 的命令rctl
。一些 Linux 发行版使用limits.conf
.
有一个名为的程序cpulimit
可以暂停进程,以确保随着时间的推移,它使用的 CPU 量少于一定数量。
当然,如果您只是想调整优先级,那么总有nice
和。renice
答案2
部分地。查看ulimit
哪个通常是 shell 辅助命令。 (在 bash 中,help ulimit
)。您可以限制其内存、总 CPU 周期和时间(但不是百分比)以及其写入的文件大小。
您也可以使用该nice
命令。但实际上,如果没有其他需要资源的事情,nice 不会产生效果。它只有在多个进程争夺CPU资源时才会生效。
在 Linux 上,您可以做的一件事是告诉 OOM Killer,当内存不足时,应该首先终止该进程。