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