Команда Linux timeout объяснение для начинающих (с примерами)

Иногда, когда вы выполняете команду в 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

 

Please follow and like us: