LINUX.ORG.RU

Прерывание бесконечного цикла по таймеру в Shell


0

0

Требуется решить задачу прерывания бесконечного цикла на shell по таймеру.
Применение конструкций со sleep возможно, но нежелательно (потому что в течение sleep'а проверка в цикле не отрабатывает, отсюда высокая латентность).
Применение ATD невозможно в виду его сумасшедшей дискретности, за минуту уже тысяча- другая ядерных бомб упасть успеет, а кто-то и Ctrl+C успеет нажать. Дело в том, что конструкция ожидания в цикле нужна для стартап-скриптов.
Хочется что-то вроде FCron, удачной замены Cron, но только для ATD.
Т.е. пишу at now+1s kill -s SIGSPEC $PID, и оно мне посылает на заготовленный trap этот самый SIGSPEC.

Такое вообще возможно на Shell?

★★★★★

Не очень понял чем не подходит sleep.

while :; do echo test; sleep 1; done & sleep 5; kill $!

Если можно менять условие в цикле, то лучше запомнить время начала и выходить когда надо:

start=`date +%s`; while ((start + 5 > `date +%s`)); do echo test; sleep 1; done

(башизм, но на чистый шелл переписать тривиально)

Jini ★★
()
Ответ на: комментарий от Jini

Не-не, нормально, подходит! Спасибо огромное, я чё-то стормозил. Правда, я пытался решать общую задачу прерывания любого цикла без его модификации (и не только цикла), но поскольку событийное управление в BASH не реализовано, это будет в самый раз.

DRVTiny ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.