У мене немає відповіді на ваше запитання, але принаймні я можу полегшити ваш біль.
Якщо ви починаєте кожну віртуальну машину з командного рядка, наприклад,
VBoxManage startvm Name_of_VM --type headless
потім верхня команда з опцією -c
відображатиметься також повна команда, яка запустила процес. Таким чином ви можете відразу визначити процес винуватця, і вбити його k
опція всередині top
себе (вам доведеться вказати номер процесу, який ви хочете вбити, який ви тільки що визначили).
Гарна річ , це працює, навіть якщо ви запускаєте всі ваші віртуальні машини з графічного інтерфейсу, а не з CLI.
EDIT:
По-друге, можливо, я знаю відповідь на ваше запитання. Я не впевнений, що це дійсно те, що ви шукаєте, в цьому випадку PLS просто скажіть мені так.
Утиліта Linux для обмеження виконання процесу на заздалегідь задане ядро taskset
. Ви повинні мати його за замовчуванням, якщо не перевірити пакет util-linux
. Ви можете відобразити цей процес спорідненість ( тобто , список cpus, на якому він дозволений для запуску, за допомогою
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, він відключається від своєї домашньої бази в Каліфорнії і продовжує затоплювати мою систему за допомогою мережевих запитів. Це не має нічого спільного з утриманням в одному процесорі.