Команда тайм-аута в Linux

Тайм-аут Linux

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

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

 timeout --preserve-status 5 ping 8.8.8.8

Работает на переднем плане

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

 timeout --foreground 5m ./script.sh

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

Заключение

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

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

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

терминал тайм-аута

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *