ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Пятница, 13 декабря, 2024

Команда Timeout в Linux

Команда Timeout в Linux

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

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

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

 

Как использовать команду timeout

Синтаксис команды timeout следующий:

timeout [OPTIONS] DURATION COMMAND [ARG]…

где DURATION, может быть положительное целое число или число с плавающей точкой, а затем с помощью дополнительного блока суффикса:

 

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

Параметры команды должны быть указаны перед аргументами.

Вот несколько основных примеров, демонстрирующих использование команды timeout:

Если вы хотите запустить команду, требующую повышенных привилегий, например 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

 

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

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

Exit mobile version