Я здогадуюсь, що проблема, яку ви хочете вирішити, полягає в тому, що у вашій коробці працює якийсь процес, який іноді погано поводиться, і сидить назавжди, прив’язуючи ядро.
Перше, що ви хочете зробити, - це спробувати виправити програму, яка зійшла з розуму. Це, безумовно, найкраще рішення. Я припускаю, що це неможливо, або вам потрібен швидкий клубок, щоб тримати вашу коробку до фіксації.
Ви, як мінімум, хочете обмежити свій сценарій, щоб потрапити лише на ту програму, яка вас хвилює. Було б найкраще, якби дозволи обмежили ваш сценарій так (наприклад, ваш сценарій працює як користувач 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сценарію, що постійно працює? Це дає мені застуду ...