В Bash иногда вам может понадобиться выполнить команду, выполнение которой занимает много времени, и вы можете не захотеть ждать ее завершения бесконечно. Одним из решений этой проблемы является использование команды timeout, которая ограничивает количество времени, в течение которого может выполняться команда. В этой статье мы обсудим, как тайм-аут команды в Bash без ненужной задержки.
Тайм-аут команды в Bash
Чтобы использовать тайм-аут команды в Bash, мы можем использовать команду «timeout». Команда «timeout» по умолчанию доступна не во всех системах, но ее можно установить с помощью менеджера пакетов в большинстве дистрибутивов Linux, вот синтаксис команды «timeout»:
timeout [OPTION] DURATION COMMAND [ARG]
Здесь «OPTION» — это необязательный аргумент, определяющий поведение команды тайм-аута, «DURATION» — это ограничение времени для запуска команды, а «COMMAND [ARG]» — это команда и ее аргументы, которые мы хотим запустить.
Например, предположим, что мы хотим запустить команду «sleep» на пять секунд, но мы хотим, чтобы тайм-аут команды истек через три секунды, и вот пример сценария оболочки:
#!/bin/bash echo "Запуск команды sleep с тайм-аутом 3 секунды..." timeout 3s sleep 5s echo "Команда Sleep завершена."
Здесь мы указали продолжительность тайм-аута как 3 секунды, а продолжительность команды «sleep» как 5 секунд. Команда «timeout» остановит команду «sleep» через 3 секунды, даже если команда «sleep» обычно выполняется в течение 5 секунд.
Чтобы предотвратить ненужную задержку при использовании команды «timeout», мы можем использовать опцию «-k». Параметр «-k» указывает сигнал, который будет отправлен команде, если она превысит лимит времени ожидания. Этот сигнал приведет к немедленному завершению команды, вместо ожидания ее корректного завершения.
Например, предположим, что мы хотим запустить команду «sleep» на пять секунд, но мы хотим установить тайм-аут команды через три секунды и отправить сигнал SIGINT, если он превышает лимит времени ожидания. Мы можем сделать это, выполнив следующую команду:
#!/bin/bash
echo "Запуск команды sleep с тайм-аутом 3 секунды и сигналом SIGINT через 2 секунды” timeout -k 2s 3s sleep 5s echo "Команда Sleep завершена."
Здесь мы указали продолжительность тайм-аута как 3 секунды и сигнал, который будет отправлен как SIGINT, если он превышает предел тайм-аута. Параметр «-k 2s» указывает, что сигнал SIGINT должен быть отправлен после двух секунд ограничения времени ожидания.
Заключение
Команда timeout в Bash — это полезный инструмент, который может помочь вам более эффективно выполнять команды и предотвратить ненужные задержки. Используя команду «timeout» и параметр «-k», вы можете ограничить количество времени, в течение которого команда может выполняться, и отправить сигнал для ее немедленного завершения, если она превышает лимит времени ожидания. Это поможет вам сэкономить время и более эффективно запускать сценарии.