Объяснение команды тайм-аута Linux для начинающих (с примерами)
На этой странице
- Команда тайм-аута Linux
- Q1. Как использовать команду тайм-аута?
- Вопрос 2. Как получить статус выхода команд на выходе?
- Вопрос 3. Как изменить время ожидания сигнала?
- Q4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?
- Заключение
Иногда, когда вы выполняете команду в 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 может оказаться весьма удобным инструментом. Здесь, в этом уроке, мы обсудили большинство опций, предлагаемых этой утилитой. После того, как вы попрактикуетесь в этом, вы можете узнать больше о тайм-ауте, перейдя на его справочную страницу.