Как задать таймаут выполнения процесса?

Рейтинг: 4Ответов: 2Опубликовано: 28.05.2023

Есть задача:

run script.sh >> log.file &

Как задать таймаут? Допустим, если задача выполняется более 60 секунд, то кикаем ее.

Ответы

▲ 7Принят

Для этого есть команда timeout из пакета coreutils.

Например, чтобы для вашей команды задать таймаут равный 60 секундам, выполните следующую команду:

timeout 60 ВАША_КОМАНДА
▲ 0

Но допустим у вас нет timeout или есть жгучее желание собрать свой велосипед(как у меня)) Тогда можно попробовать что-нибудь такое:

# зададим время ожидания - 3(сек.)
runtime=3

# Запускаем искомую команду в фоне и записываем её pid в переменную $pid
some_command & pid=$!

# Запускаем в фоне подпрограмму которая будеть ждать $runtime секунд
# затем выполнит kill $pid
(sleep $runtime; kill $pid) &


# Тест
 sleep 20   &   pid=$!
(sleep 3; kill $pid) &