Я предполагаю, что проблема, которую вы хотите решить, заключается в том, что у вас на процессоре запущен какой-то процесс, который иногда ведет себя неправильно и постоянно работает с ядром.
Первое, что вы хотите сделать, это попытаться исправить сумасшедшую программу. Это, безусловно, лучшее решение. Я собираюсь предположить, что это невозможно, или вам нужен быстрый Kluge, чтобы ваш ящик работал до тех пор, пока он не будет исправлен.
Вы, как минимум, хотите ограничить свой сценарий только той программой, которая вас интересует. Было бы лучше, если бы разрешения ограничивали ваш скрипт таким образом (например, ваш скрипт запускается как пользователь X, единственная другая вещь, выполняемая как X, это программа).
Еще лучше было бы использовать что-то вроде ulimit -t
ограничения общего времени процессора, которое может использовать программа. Точно так же, если он потребляет всю память, проверьте ulimit -v
. Ядро применяет эти ограничения; смотрите bash
man-страницу (это встроенная оболочка) и setrlimit(2)
man-страницу для подробностей.
Если проблема не в запущенном процессе, а в слишком большом количестве запущенных процессов, тогда реализуйте некоторую форму блокировки, чтобы предотвратить запуск более чем X (или - это должно быть знакомо ulimit -u
). Вы также можете рассмотреть возможность изменения приоритета планировщика этих процессов (используя nice
или renice
), или, что еще важнее, использовать sched_setscheduler
для изменения политики SCHED_IDLE
.
Если вам нужно еще больше контроля, взгляните на контрольные группы (cgroups). В зависимости от того, какое ядро вы используете, вы можете на самом деле ограничить количество процессорного времени, памяти, ввода-вывода и т. Д., Которое потребляет целая группа процессов. Контрольные группы довольно гибки; скорее всего, они могут делать все, что вы пытаетесь, без каких-либо хрупких клугов. Arch Linux Wiki имеет введение в cgroups, которое стоит прочитать, как и серия cgroups Нила Брауна на LWN.
while [ 1 ]
заставляет меня задуматься, сколько процессора потребляет один этот скрипт. Кроме того, 3 вызоваkill -9
в сценарии работают постоянно? Это дает мне озноб ...