您应该使用 cgroup 来执行此操作。
请参阅“man cgrules.conf”和“man cgconfig.conf”。
Fedora 上的 systemctl 的更高版本应该支持将用户直接粘贴到 cgroup 中,这样您就可以做得更好。
这不会限制 CPU,因为如果有可用的 CPU 资源(没有人使用),它将使用所有 CPU,但是如果其他东西也需要 CPU,它将根据配置的“cpu.cpu”分配 CPU 份额。股”的价值。
另外,正如建议的那样,对 CPU 时间设置 ulimit 将确保正在运行的进程在因使用过多 CPU 而被杀死之前获得累积的 jiffies 数。这可能会对用户正在使用的长时间运行的进程产生负面影响,这些进程在很长一段时间内自然积累了一定数量的 jiffies。
您还可以使用 cgroup 强制所有用户进程仅运行在您的一个核心上,这样您至少可以保证如果一个 CPU 不堪重负,它不会对操作系统的其余进程产生负面影响。
CGroups 也是限制内存使用的好方法。您可以将其与 pam_limits 结合使用以防止 fork 轰炸。
编辑:我还应该指出我认为你的要求不一定相关。只要有时间让其他进程运行,1 个进程使用 100% 的 CPU 并不一定是坏事。无论如何,Linux 上完全公平的调度程序保证了这种行为。
如果 CPU 只是空闲,那么一个进程耗尽所有 CPU 并没有什么问题。仅当多个进程需要 CPU 时间并且其中一个进程占用 CPU 时,您的问题才会出现。这就是 cgroups 的优势所在,因为它允许您控制在发生 CPU 争用时分配给不同进程的 cpu 时间。