Un * x shell script: как правильно запускать скрипт не более x миллисекунд? - PullRequest
1 голос
/ 02 февраля 2010

Я не эксперт по написанию сценариев, и мне было интересно, какой приемлемый способ запустить сценарий в течение не более x миллисекунд (и все же закончить до x миллисекунд, если сценарий выполняется до истечения времени ожидания).

Я решил эту проблему с помощью Bash таким образом, что я считаю очень хакерским, и мне интересно, есть ли лучший способ сделать это.

В основном у меня есть один скрипт оболочки под названием sleep_kill.sh который принимает PID в качестве первого аргумента и тайм-аут в качестве второго аргумента и делает это:

sleep $2
kill -9 $1 2> /dev/null 1> /dev/null

Так что, если PID соответствует сценарию, который завершается до истечения времени ожидания, ничего не будет уничтожено(Я полагаю, что у ОС не будет времени для повторного использования этого PID для другого [несвязанного] процесса, поскольку он «циклически перебирает» все идентификаторы процессов, прежде чем начать их повторное использование).

В любом случае, тогдаЯ называю свой сценарий, который может «зависнуть» или тайм-аут:

command_that_may_hang.sh
PID=$!
sleep_kill.sh $PID .3
wait $PID > /dev/null 2>&1

И я буду ждать не более 300 мс для command_that_may_hang.sh.И все же, если бы command_that_may_hang.sh потребовалось всего 10 мсек, я не буду «застревать» в течение 300 мсек.

Было бы замечательно, если бы какой-нибудь эксперт по оболочкам смог объяснить недостатки этого подхода и что нужно сделатьвместо этого.

1 Ответ

2 голосов
/ 02 февраля 2010

Посмотрите на этот скрипт: http://www.pixelbeat.org/scripts/timeout Обратите внимание, что тайм-ауты менее одной секунды практически бессмысленны в большинстве систем из-за задержек планирования и т. Д. Обратите внимание, что в более новых coreutils включена команда тайм-аута и разрешение составляет 1 секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...