Как использовать тайм-аут для выполнения синхронизированных команд в Linux

12 set 2022 2 min di lettura
Как использовать тайм-аут для выполнения синхронизированных команд в Linux
Indice dei contenuti

Введение

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 только с двумя аргументами, продолжительностью и обрабатываемой командой.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.