Иногда, когда вы выполняете команду в Linux, вам может потребоваться запустить ее в течение определенного периода времени.
Существует утилита командной строки – timeout – которая специально разработана для этой цели.
В этой статье мы обсудим основы этой команды на нескольких простых для понимания примерах.
Но прежде чем сделать это, стоит упомянуть, что все примеры в этом руководстве были протестированы на машине с Ubuntu 18.04 LTS.
Команда timeout Linux
Как следует из названия, команда timeout в Linux позволяет вам выполнять команду с ограничением по времени.
Ниже приводится ее синтаксис:
timeout [OPTION] DURATION COMMAND [ARG]...
Ниже приведены примеры в стиле вопрос / ответ, которые должны дать вам лучшее представление о том, как работает этот инструмент.
Вопрос 1. Как использовать команду timeout?
Основное использование довольно просто – просто запустите ‘timeout’, указав во входных данных значение времени ожидания (в секундах), а также команду, которую вы хотите выполнить.
Например, если вы хотите тайм-аут команды ping через 5 секунд, вот как вы можете использовать тайм-аут в этом случае.
timeout 5 ping itisgood.ru
Вопрос 2. Как получить статус вывода команды?
По умолчанию, если команда timeout успешна, она возвращает 124 в качестве состояния выхода. Ниже приведен пример:
В первом случае я позволил команде timeout успешно работать, и, как вы можете видеть, статус вывода был 124.
Однако во время второго запуска я принудительно убил команду, используя Ctrl + C, и в этом случае, статус выхода был 0.
Но в случае, если вы хотите, чтобы тайм-аут возвратил статус входной команды, даже если тайм-аут прошел успешно, вам придется использовать параметр командной строки –preserve-status.
Например:
timeout --preserve-status 5 ping google.com
Вопрос 3. Как изменить время ожидания сигнала?
Нет смысла гадать, что тайм-аут работает, посылая сигнал входной команде, чтобы последняя прекратила выполнение к приближающемуся сроку.
По умолчанию SIGTERM используется командой.
Однако, если вы хотите, вы можете изменить сигнал, отправляемый по таймауту.
Для этого вам нужно будет использовать параметр командной строки -s и указать в качестве входного сигнала сигнал, который вы хотите отправить по таймауту.
Например:
timeout -s SIGKILL [COMMAND]
Чтобы получить список доступных сигналов, которые вы можете отправить, выполните следующую команду:
kill -l
Вопрос 4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?
Иногда вы можете встретить входную команду, которая продолжает выполняться даже после того, как тайм-аут отправляет начальный сигнал.
Для подобных случаев timeout предлагает опцию –kill-after.
Вот как man-страница объясняет это:
-k, --kill-after=DURATION
also send a KILL signal if COMMAND is still running
this long after the initial signal was sent
Итак, как вы можете видеть, вам нужно указать продолжительность, чтобы сообщить тайм-ауту, через сколько времени должен быть отправлен этот сигнал.
Заключение
В зависимости от того, какую работу вы выполняете, команда timeout может оказаться весьма удобным инструментом.
Здесь, в этом руководстве, мы обсудили большинство вариантов, предлагаемых этой утилитой.
Как только вы закончите практиковать их, вы можете узнать больше о тайм-ауте, перейдя на его справочную страницу.
man timeout