Как запустить программу только с одним ядром процессора?

28

Я пытаюсь запустить кучу скриптов, связанных с игровым сервером в Terminator. Единственная проблема заключается в том, что когда я это делаю, Terminator обнаруживает все ядра моего процессора и лаги ПК. Есть ли способ запустить его, но обмануть его, думая, что у меня только 1 процессорное ядро?

user245115
источник
2
Привет, звучит так, как будто вы страдаете от проблемы xy, иногда стоит оглянуться назад на то, чего вы хотите достичь, а не на попытку решения, которое вы пробовали, поскольку кажется, что вам нужно запустить программу без замедления ПК, а не просто запустить что-то на одном ядре. Тем не менее, это очень хороший вопрос. +1
Vality
связанные: unix.stackexchange.com/questions/23106/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

44

Это не terminatorто, что делает «распространение» на весь процессор данного процесса. Сам Linux (ядро) делает это. Задача (процесс) запланирована как доступная для запуска на всех процессорах по умолчанию; если он использует потоки, он может использовать более одного процессора одновременно.

Чтобы ограничить процесс определенным процессором, используйте команду taskset.

taskset --cpu-list 1,2 my_command 

Эта команда заставляет my_command работать только на процессорах № 1 или № 2.

Чтобы узнать больше, введите man tasksetили выполните поиск «сходство с процессором Linux» (сначала нажмите здесь ).

Rmano
источник
2
Кстати, вы также можете попытаться просто сдать в аренду «плохие» процессы, понизив их приоритет планирования.
Маттео Италия
@ MatteoItalia Я обнаружил, что Ubuntu 13.10 и 14.04 по умолчанию игнорируют хороший уровень. Вы должны добавить kernel.sched_autogroup_enabled = 0к , /etc/sysctl.confчтобы сделать его работу. Однако я также обнаружил, что 13.10 часто вызывает панику ядра во время загрузки, если автогруппа отключена.
Касперд
Как насчет дочерних процессов родительского процесса? Они наследуют ядро ​​/ процессорную принадлежность своего родительского процесса?
yildizabdullah
5

Хотя другой ответ уже дал буквальный ответ, я бы исследовал возможность, что это делается неправильно. Вместо этого вы должны запустить сценарий, который вы не хотите замедлять компьютер (например, не интерактивные сценарии) с помощью niceкоманды.

Для этого просто введите префикс команды, которую вы хотите запустить с помощью nice, например: nice command_to_run Это приведет к расстановке приоритетов программы перед другими задачами и не замедлит работу вашего компьютера. Я часто использую эту технику, когда выполняю длинную компиляцию, которая в противном случае замедлила бы мой компьютер для сканирования, это дает преимущество в том, что программа позволяла использовать все ядра, когда машина не занята, но быстро останавливает ее, используя их, когда вы запускаете что-то остальное.

Vality
источник
Если я использую команду типа "хороший открытый терминатор", будет ли работать терминатор со всеми ядрами процессора, независимо?
user245115
Да, и, кстати, если я двигаю мышь и ничего не открывается, будет ли она использовать все процессоры? И сколько времени понадобится после того, как я перестану двигать мышью, чтобы она использовала все процессоры? И могу ли я использовать это с набором задач? (Да, я настоящий нуб с Linux.)
user245115
@ user245115 Если вы используете утилиту nice, вполне возможно, что терминатор будет использовать несколько ядер ЦП, однако он немедленно прекратит использование этих ядер, если другая программа (не запущенная с nice) захочет использовать их, поэтому вы не будете испытывать замедления, однако это используйте их, если они полностью свободны и не используются. На это не должно влиять использование мыши или любое другое взаимодействие с программой.
Vality
@ user245115 Также должно быть возможно использовать это с набором задач, просто написав, taskset nice open terminatorчтобы использовать оба. Однако это будет излишним, так как вы будете использовать две разные программы для достижения эффекта уменьшения использования ресурсов программой.
Vality
@ user245115 В тот момент, когда вы выполняете любое другое действие (например, перемещаете мышь), терминатору дается меньше процессорного времени, это фактически мгновенно, и как только вы прекращаете другую деятельность, оно снова использует его (также эффективно мгновенно)
Vality