Я не эксперт по написанию сценариев, и мне было интересно, какой приемлемый способ запустить сценарий в течение не более 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 мсек.
Было бы замечательно, если бы какой-нибудь эксперт по оболочкам смог объяснить недостатки этого подхода и что нужно сделатьвместо этого.