Введение
timeout
— это утилита командной строки, которая выполняет указанную команду и завершает ее, если она все еще выполняется по прошествии определенного времени. Другими словами, он позволяет тайм- timeout
для выполнения команды с ограничением по времени. Команда timeout
является частью основного пакета утилит GNU, который установлен почти во всех дистрибутивах Linux.
Это полезно, когда вы хотите запустить команду, не имеющую встроенной опции тайм-аута.
В этой статье мы объясним, как использовать команду тайм- timeout
Linux.
Как использовать команду тайм-аута
Синтаксис команды timeout
следующий:
timeout [OPTIONS] DURATION COMMAND [ARG]…
Параметр DURATION
может быть положительным целым числом или числом с плавающей запятой, за которым следует необязательный суффикс единицы измерения:
s
- секунды (по умолчанию)m
- минутыh
- часыd
- дни
Если единицы измерения не используются, по умолчанию используются секунды. Если для длительности установлено нулевое значение, соответствующий тайм-аут отключен.
Опции команды должны быть указаны перед аргументами.
Вот несколько основных примеров, демонстрирующих использование команды timeout
:
Завершить команду через 5 секунд:
timeout 5 ping 8.8.8.8
Завершить команду через 5 минут:
timeout 5m ping 8.8.8.8
Завершить команду через 1 и 6 секунд:
timeout 1.6m ping 8.8.8.8
Если вы хотите запустить команду, требующую повышенных привилегий, например tcpdump
, добавьте команду sudo
перед timeout
-аутом:
sudo timeout 300 tcpdump -n -w data.pcap
Отправить определенный сигнал
Если сигнал не дан, timeout
отправляет сигнал SIGTERM
управляемой команде, когда достигается предел времени. Вы можете указать, какой сигнал отправлять, используя параметр -s
( --signal
).
Например, чтобы отправить SIGKILL
команде ping
через 1 минуту, вы должны использовать:
sudo timeout -s SIGKILL ping 8.8.8.8
Сигнал может быть указан с помощью имени SIGKILL
name или его соответствующего числа 9
. Следующая команда идентична предыдущей:
sudo timeout -s 9 ping 8.8.8.8
Чтобы получить список всех доступных сигналов, используйте команду kill -l
:
kill -l
Убить (убить) заблокированные процессы
SIGTERM
, сигнал по умолчанию, который отправляется при превышении лимита времени, может быть обнаружен или проигнорирован некоторыми процессами. В таких ситуациях процесс продолжает выполняться после отправки сигнала завершения.
Чтобы убедиться, что отслеживаемая команда прервана, используйте параметр -k
( --kill-after
) через некоторое время. Когда эта опция используется после достижения указанного срока, команда timeout
отправляет сигнал SIGKILL
управляемой программе, который нельзя перехватить или проигнорировать.
В следующем примере timeout
запускает команду для 1 и, если она не завершена, уничтожит ее через 10 секунд:
sudo timeout -k 10 1m ping 8.8.8.8
Сохранение статуса выхода
timeout
возвращает 124
, когда лимит времени достигнут. В противном случае он возвращает статус выхода управляемой команды.
Чтобы вернуть статус выхода команды даже при достижении лимита времени, используйте параметр --preserve-status
:
timeout --preserve-status 5 ping 8.8.8.8
Бег на переднем плане (передний план)
По умолчанию timeout
запускает управляемую команду в фоновом режиме. Если вы хотите запустить команду на переднем плане, используйте параметр --foreground
:
timeout --foreground 5m./script.sh
Этот параметр полезен, когда вы хотите запустить интерактивную команду, требующую ввода данных пользователем.
Вывод
Команда timeout
используется для выполнения определенной команды с ограничением по времени.
timeout
— это простая команда, у которой не так много параметров. Обычно вы вызываете тайм- timeout
только с двумя аргументами, продолжительностью и обрабатываемой командой.