#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;
}
您可以尝试通过使用 nice 降低优先级来限制您的程序。那里不涉及编程。
以“50%”的 CPU 运行并没有什么意义。您希望程序在可用时使用所有可能的资源。如果 CPU 没有做任何其他事情,那么该程序还不如充分利用它。如果您希望程序真的什么都不做,您必须修改源代码并在可能的情况下暂停/休眠。
你想要的是让其他一切都具有更高的优先级。查看 nice 命令的手册页,在 nice 19 处运行它
限制资源的另一种可能更有效的方法是安装 schedutils 包,并使用 SCHED_BATCH 进程调度程序运行程序。
Setrlimit和合作...
从这里
您正在寻找简单快速的东西吗?试试cpulimit 程序。赶紧跑:
瞧,它是有限的。
如果您不想修改程序,另一个需要考虑的选项是虚拟化。
如果你想限制一个进程的cpu,基于百分比的概念,考虑cpulimit。
您可以在应用程序中手动进行时间切片,方法是使用高性能计时器并测量顶级循环的每次迭代所花费的时间,然后在该循环中放入适当的睡眠(或 nanosleep)。这不会直接与 CPU 的百分比相关,尤其是跨机器,但它会限制程序占用的 cpu 资源。
看看对照组。
LWN 有一篇关于它们的文章。
Redhat、Fedora、CentOS 有一个名为 libcgroup 的 RPM 包,它有几个方便的命令行工具、一个系统守护进程和一些用于管理控制组的配置文件。
这是基于在SourceForge 上托管的libcg。