У меня нет ответа на ваш вопрос, но, по крайней мере, я могу облегчить вашу боль.
Если вы запускаете каждую виртуальную машину из командной строки, например, как
VBoxManage startvm Name_of_VM --type headless
тогда верхняя команда с опцией -c
также отобразит полную команду, которая запустила процесс. Таким образом, вы можете сразу идентифицировать процесс-виновника и уничтожить его с помощью опции k
внутри самой top
(вам нужно будет указать номер процесса, который вы хотите уничтожить, который вы только что определили).
Хорошо, что это работает, даже если вы запускаете все свои виртуальные машины из GUI, а не из CLI.
РЕДАКТИРОВАТЬ:
Если подумать, возможно, я знаю ответ на ваш вопрос. Я не уверен, что это действительно то, что вы ищете, в этом случае, пожалуйста, просто скажите мне об этом.
Утилита Linux, ограничивающая выполнение процесса предварительно заданным ядром, - это taskset
. Вы должны иметь его по умолчанию, если нет, проверьте пакет util-linux
. Вы можете отобразить сходство процесса (т. Е. Список процессоров, на которых ему разрешено запускаться) с помощью
taskset -cp Process_ID
(флаг p
указывает, что ниже следует номер процесса, флаг c
заменяет строку символов на шестнадцатеричное представление ядер ЦП, которое будет использоваться по умолчанию).
Вы можете назначить уже запущенный процесс для запуска только на ядрах 0 и 1, например, с помощью
taskset -cp 0,1 Process_ID
или запустить новую программу на ядре 0 только с помощью:
taskset -c 0 VBoxManage startvm Name_of_VM --type headless
Два предостережения: во-первых, тот факт, что вы ограничили процесс для запуска на одном процессоре, не означает, что он будет единственным процессом, выполняющимся на нем: все процессы, сродство которых включает этот процессор, будут работать в течение некоторой доли времени на Это. Если вы хотите зарезервировать данный ЦП для исключительного использования процесса, который вы установили с taskset
набора задач , вам придется использовать параметр isolcpus
который изолирует данный ЦП от планировщика ядра. Просто добавьте параметр isolcpus = [cpu_number] в командную строку ядра Linux для загрузчика.
Кроме того, вам следует учесть, что ограничение процесса одним процессором не должно быть total solution
о котором вы, похоже, думаете. Процессоры используют периферийные устройства любого рода, и при определенных обстоятельствах они могут застрять, потому что рассматриваемое периферийное устройство становится недоступным, что приводит к тому, что центральный процессор зацикливается в своих запросах, а шина и, возможно, также периферийное устройство перегружаются запросами. Пример? Я использую контроллер Sonos, работающий под Wine; когда я активирую VPN, он отключается от своей домашней базы в Калифорнии и продолжает заполнять мою систему сетевыми запросами. Это не имеет ничего общего с ограничением в одном процессоре.