Чи можу я обмежити процес певним циклом часу / ЦП?


16

У нас є сценарій, який працює на наших веб-серверах, ініційований дією клієнта, який ініціює процес Unix для створення деяких файлів кешу. Оскільки цей процес діє на файли, надані нашим клієнтом, він іноді погано поводиться, працює настільки довго, що процес PHP, який породжує його час, або використовує стільки часу процесора, що sysadmin вб'є його.

Чи є якась команда, яку я міг би запустити, яка обмежила б час / час роботи процесора? Я шукаю таку команду, як /usr/bin/time, де я міг би запустити цю команду і передати її командному рядку, я хочу, щоб вона була запущена і обмежена.

Відповіді:


13

На додаток до відповіді Гілла, є інструмент cpulimit , який робить саме те, що ви хочете - включаючи модифікацію під час виконання. Крім того, він може обмежуватися лише певними процесорами / ядрами IIRC.


12

З програми, телефонуйте setrlimit(RLIMIT_CPU, ...). З оболонки зателефонуйте ulimit -t 42(це не стандартно, але підтримується більшістю оболонок (включаючи bash та ksh) у більшості варіантів unix). Це призводить до того, що поточний процес буде вбитий після того, як він використав N секунд часу процесора. Обмеження успадковується дочірніми процесами. Поширена ідіома оболонки - це (ulimit -t 42; runaway_process)якщо ви хочете мати можливість після цього запускати інші необмежені процеси з тієї ж оболонки.

Див. Також Чи є спосіб обмежити об'єм пам'яті, який певний процес може використовувати в Unix? . Принцип той самий, ви просто обмежуєте інший ресурс.


Проблема в тому, що у мене немає вихідного коду для програми, тому я не можу додати, setrlimitі я його нерестую через PHP, щоб у мене не було оболонки ...
Josh

6
@Josh: Якщо ви шукаєте конструкцію, аналогічну time php /cgi/foo.php, ви можете використовувати bash -c 'ulimit -t 42; exec "$0" "$@"' php /cgi/foo.php.
Жил "ТАК - перестань бути злим"

@Josh apache? також я думаю, що цей матеріал можна встановити по всій системі ...
xenoterracide

@xenoterracide так, це Apache, але я хочу лише обмежити цей процес, а не всі апаш-процеси. Жільський баш-онлінер може спрацювати чудово!
Джош

3

Ви також можете скористатися timeoutкомандою для блокування запуску процесу довше визначеного часу.

приклад

$ date
Mon May  6 07:35:07 EDT 2013
$ timeout 5 sleep 100
$ date
Mon May  6 07:35:14 EDT 2013

Докладніші відомості див. На сторінці " Час очікування" .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.