Timeout команды в Linux

timeoutэто утилита командной строки, которая запускает указанную команду и завершает ее, если она все еще выполняется по истечении заданного периода времени. Другими словами, timeoutпозволяет запустить команду с ограничением по времени. Эта timeoutкоманда является частью пакета основных утилит GNU, который установлен практически в любом дистрибутиве Linux.

Это удобно, когда вы хотите запустить команду, которая не имеет встроенной опции тайм-аута.

В этой статье мы объясним, как использовать команду Linux timeout.

Как использовать 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, когда лимит времени достигнут. В противном случае он возвращает статус выхода управляемой команды.

Чтобы вернуть статус выхода команды даже при достижении лимита времени, используйте --preserve-statusопцию:

timeout --preserve-status 5 ping 8.8.8.8

Бег на переднем плане

По умолчанию timeoutзапускает управляемую команду в фоновом режиме. Если вы хотите запустить команду на переднем плане, используйте --foregroundопцию:

timeout --foreground 5m ./script.sh

Этот параметр полезен, когда вы хотите запустить интерактивную команду, требующую ввода данных пользователем.

Вывод

Команда timeoutиспользуется для запуска данной команды с ограничением по времени.

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Was this helpful?

0 / 0