是否有可能使一个程序不占用超过50%的CPU?

目前我有一个程序占用了太多的CPU。

我怎么能限制它占用的CPU数量?

OS是Linux, Fedora 。

我无法修改该程序的源代码。

我需要的是一个Bash命令。

你可以尝试通过降低优先级来限制你的程序。 没有涉及的程序devise。

以“50%”CPU运行并不是那么有意义。 您希望程序在可用时使用每个可能的资源。 如果CPU没有做其他的事情,那么这个程序也可以充分利用它。 如果你想让这个程序真的什么都不做,你就必须修改源代码,并尽可能地暂停/hibernate。

你想要的是让其他一切都有更高的优先权。 看到漂亮的命令的手册页,运行在好19

另一种可能更有效的限制资源的方法是安装schedutils包,并使用SCHED_BATCH进程调度程序运行程序。

Setrlimit和合作…

#include <sys/resource.h> #include <sys/time.h> #include <unistd.h> int main () { struct rlimit rl; /* Obtain the current limits. */ getrlimit (RLIMIT_CPU, &rl); /* Set a CPU limit of 1 second. */ rl.rlim_cur = 1; setrlimit (RLIMIT_CPU, &rl); /* Do busy work. */ while (1); return 0; } 

从这里

你正在寻找简单又快速的东西? 试试cpulimit程序 。 赶紧跑:

 cpulimit name-of-program 

瞧,这是有限的。

如果你不想修改程序,另一个选项是虚拟化。

如果你想限制一个进程的CPU,基于百分比的概念,考虑cpulimit 。

您可以使用高性能计时器在应用程序内手动进行时间切片,并测量顶级循环的每次迭代所花费的时间,然后在该循​​环中进行适当的睡眠(或纳秒睡眠)。 这不会直接关联到CPU的一个百分比,特别是跨机器,但它会限制程序所需的CPU资源。

看看控制组。

LWN有一篇关于他们的文章 。

Redhat,Fedora,CentOS有一个名为libcgroup的RPM包,它有几个方便的命令行工具,一个系统守护进程和一些configuration文件来pipe理控制组。

这是基于SourceForge上托pipe的libcg 。