Я здогадуюсь, що проблема, яку ви хочете вирішити, полягає в тому, що у вашій коробці працює якийсь процес, який іноді погано поводиться, і сидить назавжди, прив’язуючи ядро.
Перше, що ви хочете зробити, - це спробувати виправити програму, яка зійшла з розуму. Це, безумовно, найкраще рішення. Я припускаю, що це неможливо, або вам потрібен швидкий клубок, щоб тримати вашу коробку до фіксації.
Ви, як мінімум, хочете обмежити свій сценарій, щоб потрапити лише на ту програму, яка вас хвилює. Було б найкраще, якби дозволи обмежили ваш сценарій так (наприклад, ваш сценарій працює як користувач X, єдине інше, що працює як X - програма).
Ще краще було б використовувати щось на кшталт ulimit -t
обмеження кількості загального процесорного часу, який може використовувати програма. Аналогічно, якщо вона споживає всю пам'ять, перевірте ulimit -v
. Ядро виконує ці обмеження; Докладні відомості див. у bash
манпайті (це вбудована оболонка) та setrlimit(2)
вручну.
Якщо проблема не є процесом запуску amok, а замість цього запущено занадто багато процесів, то застосуйте певну форму блокування, щоб запобігти запуску більш ніж X (або - це має бути знайоме - ulimit -u
). Ви можете також розглянути можливість зміни пріоритету планувальника цих процесів (з використанням nice
або renice
) або для ще більш різкого використання sched_setscheduler
для зміни політики на SCHED_IDLE
.
Якщо вам потрібно ще більше контролю, подивіться контрольні групи (групи). Залежно від ядра, яке ви працюєте, ви можете фактично обмежити кількість часу процесора, пам'яті, вводу / виводу тощо, яке споживає ціла група процесів разом. Контрольні групи досить гнучкі; вони, ймовірно, можуть робити все, що ви намагаєтесь зробити, без крихких клубочків. Arch Linux Wiki має вступ до груп, який варто прочитати, як і серія груп груп Ніла Брауна на LWN.
while [ 1 ]
змушує мене замислитися, скільки саме процесора цей сценарій буде споживати. Також 3 виклики доkill -9
сценарію, що постійно працює? Це дає мені застуду ...