如何仅使用一个CPU内核运行程序?


28

我正在尝试在Terminator中运行一堆与游戏服务器相关的脚本。唯一的问题是,当我这样做时,终结者会检测到我所有的CPU内核,并且PC会滞后。有什么方法可以启动它,却可以欺骗我以为我只有1个CPU内核?


2
嗨,听起来您这里可能遇到了xy问题,有时值得回顾一下您想要实现的目标,而不是您尝试过的已尝试解决方案,因为看起来您所需要的只是在不降低速度的情况下运行程序PC,而不仅仅是在一个内核上运行某些东西。尽管如此,这是一个很好的问题。+1
有效期

Answers:


44

不是terminator在给定进程的所有CPU上进行“传播”。Linux本身(内核)正在执行此操作。默认情况下,任务(进程)被安排为可在所有CPU上运行;如果使用线程,则一次可以使用多个CPU。

要将进程限制为特定的CPU,请使用命令taskset

taskset --cpu-list 1,2 my_command 

此命令强制my_command仅在CPU#1或#2上运行。

要了解更多信息,请键入man taskset或搜索“ Linux CPU亲和力”(在此处首次点击)。


2
顺便说一句,您也可以尝试减少“不良”进程,从而降低其调度优先级。
Matteo Italia 2014年

@MatteoItalia我发现默认情况下Ubuntu 13.10和14.04忽略了尼斯级别。你要添加kernel.sched_autogroup_enabled = 0/etc/sysctl.conf使它工作。但是我还发现,如果禁用了自动组功能,则在启动期间13.10经常会出现内核崩溃。
kasperd 2014年

父流程的子流程呢?他们是否继承了父进程的核心/ CPU相似性?
yildizabdullah

5

尽管另一个答案已经给出了字面上的答案,但我将探索这种方法未正确执行的可能性。相反,您应该使用该nice命令运行不想降低计算机速度的脚本(例如非交互式脚本)。

为此,只需在要运行的命令前面加上漂亮的前缀即可,例如: nice command_to_run 这将导致该程序在其他任务之下被取消优先级,并且不会降低计算机的速度。在执行长时间编译时,我经常使用这种技术,否则会使我的PC缓慢爬行,其优点是允许程序在计算机不忙时使用所有内核,但在运行某些程序时会迅速停止使用它们其他。


如果我使用“ nice open terminator”之类的命令,则终结器将在所有CPU内核上运行吗?
user245115 2014年

哦,顺便说一句,如果我移动鼠标而没有打开任何东西,它将使用所有CPU吗?在我停止移动鼠标以利用所有CPU之后需要多长时间?我可以在Taskset中使用它吗?(是的,我对Linux是一个真正的
菜鸟

@ user245115如果您使用nice实用程序,则终结者可能会使用多个CPU内核,但是如果另一个程序(不是很好地运行)想要使用它们,它将立即停止使用这些内核,因此您不会遇到速度变慢的情况,但是它将如果它们完全免费且未使用,请使用它们。这不应受到鼠标用法或与程序的任何其他交互的影响。
价格

@ user245115还应该可以通过编写taskset nice open terminator使用两者来将其与任务集一起使用。但是,这太夸张了,因为您将使用两个不同的程序来达到减少程序资源使用量的效果。
价格

@ user245115在您执行任何其他操作(例如移动鼠标)时,终结者将获得较少的CPU时间,这实际上是即时的,并且一旦您停止其他活动,
终结者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.