Поиск по сайту:

Объяснение команды тайм-аута Linux для начинающих (с примерами)


На этой странице

  1. Команда тайм-аута Linux
  2. Q1. Как использовать команду тайм-аута?
  3. Вопрос 2. Как получить статус выхода команд на выходе?
  4. Вопрос 3. Как изменить время ожидания сигнала?
  5. Q4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?
  6. Заключение

Иногда, когда вы выполняете команду в Linux, вы можете захотеть запустить ее в течение определенного периода времени. Существует утилита командной строки timeout, специально разработанная для этой цели. В этой статье мы обсудим основы этой команды, используя несколько простых для понимания примеров.

Но прежде чем мы это сделаем, стоит упомянуть, что все примеры в этом руководстве были протестированы на компьютере с Ubuntu 18.04 LTS.

Команда тайм-аута Linux

Как следует из названия, команда тайм-аута в Linux позволяет выполнить команду с ограничением по времени. Ниже приведен его синтаксис:

timeout [OPTION] DURATION COMMAND [ARG]...

И вот как это объясняет справочная страница инструментов:

timeout - run a command with a time limit
Start COMMAND, and kill it if still running after DURATION

Ниже приведены несколько примеров в стиле вопросов и ответов, которые должны дать вам лучшее представление о том, как работает этот инструмент.

Q1. Как использовать команду тайм-аута?

Основное использование довольно простое — просто выполните тайм-аут, указав во входных данных значение тайм-аута (рассматривается в секундах), а также команду, которую вы хотите запустить.

Например, если вы хотите тайм-аут команды ping через 5 секунд, вот как вы можете использовать тайм-аут в этом случае.

timeout 5 ping google.com

Q2. Как получить статус выхода команд на выходе?

По умолчанию, если команда timeout выполнена успешно, она возвращает 124 в качестве статуса выхода. Ниже приведен пример:

В первом случае я разрешил выполнение команды timeout успешно, и, как видите, статус выхода был 124. Однако во время второго запуска я принудительно уничтожил команду с помощью Ctrl+C, и в этом случае статус выхода было 0.

Но если вы хотите, чтобы тайм-аут возвращал статус входных команд, даже если тайм-аут прошел успешно, вам нужно использовать параметр командной строки --preserve-status.

Например:

timeout --preserve-status 5 ping google.com

Q3. Как изменить время ожидания сигнала?

Нет смысла гадать, что таймаут работает, посылая сигнал входной команде, чтобы последняя перестала выполняться к приближению крайнего срока. По умолчанию команда использует SIGTERM.

Однако, если вы хотите, вы можете изменить сигнал, который отправляется по тайм-ауту. Для этого вам нужно использовать параметр командной строки -s и указать в качестве входных данных сигнал, который вы хотите отправить по тайм-ауту.

Например:

timeout -s SIGKILL [COMMAND]

Чтобы получить список доступных сигналов, которые вы можете отправить, выполните следующую команду:

kill -l

Q4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?

Иногда вы можете столкнуться с командой ввода, которая продолжает выполняться даже после того, как тайм-аут отправляет начальный сигнал. Для подобных случаев timeout предлагает опцию --kill-after.

Вот как это объясняет справочная страница:

-k, --kill-after=DURATION

              also send a KILL signal if COMMAND is still running

              this long after the initial signal was sent

Итак, как вы можете видеть, вам нужно указать продолжительность, чтобы тайм-аут знал, через какое время этот сигнал должен быть отправлен.

Заключение

В зависимости от того, какую работу вы выполняете, команда timeout может оказаться весьма удобным инструментом. Здесь, в этом уроке, мы обсудили большинство опций, предлагаемых этой утилитой. После того, как вы попрактикуетесь в этом, вы можете узнать больше о тайм-ауте, перейдя на его справочную страницу.