Как задать таймаут выполнения процесса?
Есть задача:
run script.sh >> log.file &
Как задать таймаут? Допустим, если задача выполняется более 60 секунд, то кикаем ее.
Ответы (2 шт):
Автор решения: Vadik Sirekanyan
→ Ссылка
Для этого есть команда timeout из пакета coreutils.
Например, чтобы для вашей команды задать таймаут равный 60 секундам, выполните следующую команду:
timeout 60 ВАША_КОМАНДА
Автор решения: Ivan
→ Ссылка
Но допустим у вас нет timeout или есть жгучее желание собрать свой велосипед(как у меня)) Тогда можно попробовать что-нибудь такое:
# зададим время ожидания - 3(сек.)
runtime=3
# Запускаем искомую команду в фоне и записываем её pid в переменную $pid
some_command & pid=$!
# Запускаем в фоне подпрограмму которая будеть ждать $runtime секунд
# затем выполнит kill $pid
(sleep $runtime; kill $pid) &
# Тест
sleep 20 & pid=$!
(sleep 3; kill $pid) &