timeout: остановить зависшую команду через заданное время

Категория: Bash · Язык: Bash · Обновлено:

timeout запускает программу с лимитом времени и отправляет сигнал, если срок истёк. Это защищает cron и shell-скрипты от бесконечно зависающих подключений или внешних процессов. ????? ??????????? ?????????? ???????? ?????? ??????? ? ????????? ?????? ? ??????? ?????.

Рабочий пример

Bash
timeout --signal=TERM --kill-after=5s 30s ./backup.sh
status=$?
if [ \"$status\" -eq 124 ]; then
  echo 'backup exceeded time limit'
fi

Код 124 обычно означает, что истёк timeout; если программа сама вернула 124, обработайте результат отдельно. --kill-after завершает процесс принудительно после grace периода.

Частый вопрос

Как сохранить обычный код выхода процесса?

Опция --preserve-status сохраняет код дочерней команды. Чтобы различать timeout, проверьте завершение по сигналу или используйте явную обёртку.