Команда timeout в linux

Обновлено: 06.07.2024

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

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

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

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

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

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

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

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

  • Завершить команду через пять секунд:
  • Завершите команду через пять минут:
  • Завершите команду через одну минуту и шесть секунд:

Если вы хотите запустить команду, требующую повышенных привилегий, например tcpdump , добавьте sudo перед timeout :

Отправка определенного сигнала

Если сигнал не поступает, timeout отправляет сигнал SIGTERM управляемой команде по достижении лимита времени. Вы можете указать, какой сигнал отправлять, используя параметр -s ( --signal ).

Вы можете указать сигнал по имени, например SIGKILL , или по его номеру, например 9 . Следующая команда идентична предыдущей:

Чтобы получить список всех доступных сигналов, используйте команду kill -l :

Удаление застрявших процессов

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

Чтобы убедиться, что отслеживаемая команда убита, используйте параметр -k ( --kill-after ), за которым следует период времени. Когда эта опция используется после достижения заданного временного лимита, команда timeout отправляет сигнал SIGKILL управляемой программе, который не может быть пойман или проигнорирован.

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

тайм-аут -k «./test.sh»

убит по истечении заданного времени

Сохранение статуса выхода

timeout возвращает 124 когда timeout срок. В противном случае он возвращает статус завершения управляемой команды.

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

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

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

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

Выводы

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

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


Иногда, когда вы выполняете команду в Linux, вам может потребоваться запустить ее в течение определенного периода времени.

В этой статье мы обсудим основы этой команды на нескольких простых для понимания примерах.

Но прежде чем сделать это, стоит упомянуть, что все примеры в этом руководстве были протестированы на машине с Ubuntu 18.04 LTS.

Команда timeout Linux

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

Ниже приводится ее синтаксис:

Ниже приведены примеры в стиле вопрос / ответ, которые должны дать вам лучшее представление о том, как работает этот инструмент.

Вопрос 1. Как использовать команду timeout?

Например, если вы хотите тайм-аут команды ping через 5 секунд, вот как вы можете использовать тайм-аут в этом случае.

Вопрос 2. Как получить статус вывода команды?

По умолчанию, если команда timeout успешна, она возвращает 124 в качестве состояния выхода. Ниже приведен пример:

В первом случае я позволил команде timeout успешно работать, и, как вы можете видеть, статус вывода был 124.

Однако во время второго запуска я принудительно убил команду, используя Ctrl + C, и в этом случае, статус выхода был 0.

Вопрос 3. Как изменить время ожидания сигнала?

Нет смысла гадать, что тайм-аут работает, посылая сигнал входной команде, чтобы последняя прекратила выполнение к приближающемуся сроку.

По умолчанию SIGTERM используется командой.

Однако, если вы хотите, вы можете изменить сигнал, отправляемый по таймауту.

Вопрос 4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?

Иногда вы можете встретить входную команду, которая продолжает выполняться даже после того, как тайм-аут отправляет начальный сигнал.

Вот как man-страница объясняет это:

Итак, как вы можете видеть, вам нужно указать продолжительность, чтобы сообщить тайм-ауту, через сколько времени должен быть отправлен этот сигнал.

Заключение

В зависимости от того, какую работу вы выполняете, команда timeout может оказаться весьма удобным инструментом.

Здесь, в этом руководстве, мы обсудили большинство вариантов, предлагаемых этой утилитой.

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

Favorite

Добавить в избранное

Главное меню » Linux » Команда Timeout в Linux

Команда Timeout в Linux

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

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

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

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

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

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

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

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

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

  • Завершить команду через пять секунд:
  • Завершите команду через пять минут:
  • Завершите команду через одну минуту и ​​шесть секунд:

Если вы хотите запустить команду, требующую повышенных привилегий, например tcpdump, добавьте sudo перед timeout:

Отправка определенного сигнала

Сигнал может быть указан как его имя SIGKILL или его номер как 9. Следующая команда идентична предыдущей:

Чтобы получить список всех доступных сигналов, используйте команду kill -l:

Читать 10 действенных советов по усилению безопасности SSH для защиты вашего Linux-сервера

Уничтожение застрявших процессов

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

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

timeout -k “./test.sh”

убит по истечении заданного срока

Сохранение статуса выхода

timeout возвращает 124, когда достигнут срок. В противном случае он возвращает состояние завершения управляемой команды.

Запуск на переднем плане

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

Вывод

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

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

timeout linux

В этом коротком руководстве вы изучите два метода использования ограничения времени в ваших командах.

Запустите команды Linux с помощью инструмента timeout

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

Его синтаксис выглядит следующим образом.

Чтобы использовать команду, вы указываете значение времени ожидания (в секундах) вместе с командой, которую хотите запустить. Например, чтобы тайм-аут команды ping завершился через 5 секунд, вы можете выполнить следующую команду.

Вам не нужно указывать (s) после номера 5 . Команда ниже та же самая и будет работать.

Другие суффиксы включают в себя:

Вы должны указать продолжительность, чтобы timeout узнал, через сколько времени должен быть отправлен сигнал уничтожения.

Например, показанная команда будет прекращена через 8 секунд.

Запуск команд Linux с помощью программы Timelimit

Программа Timelimit запускает данную команду, а затем завершает процесс через указанное время, используя данный сигнал. Сначала он передает предупреждающий сигнал, а затем по истечении времени ожидания отправляет сигнал уничтожения.

В отличие от опции timeout, Timelimit имеет больше опций, таких как killsig, warnsig, killtime и warntime.

Timelimit можно найти в репозиториях систем на основе Debian, и для их установки используйте следующую команду.

Для систем на основе Arch вы можете установить его с помощью вспомогательных программ AUR, например, Pacaur Pacman и Packer

В других дистрибутивах Linux вы можете скачать исходный код и установить его вручную.

После установки выполните следующую команду и укажите время. В этом примере вы можете использовать 10 секунд.

Обратите внимание, что если вы не задаете аргументы, Timelimit использует значения по умолчанию: warntime = 3600 секунд, warnsig = 15 , killtime = 120 и killsig = 9 .

Вывод
Из этого руководства вы узнали, как выполнять команды с ограничением по времени в Linux. В обзоре вы можете использовать команду Timeout или утилиту Timelimit .

Команда Timeout проста в использовании, утилита Timelimit немного сложна, но имеет больше опций. Вы можете выбрать наиболее подходящий вариант в зависимости от ваших потребностей.


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

Что дает тайм-аут?

Команда тайм-аута позволяет вам установить ограничение на продолжительность времени программа будет работать. Но зачем вам это делать?

тайм-аут является частью GNU Core Utils так что у Linux и Unix-подобных операционных систем, таких как macOS, есть встроенный таймаут. Нечего устанавливать; вы можете использовать его прямо из коробки.

Начало работы с таймаутом

Вот простой пример. Например, с параметрами командной строки по умолчанию команда ping будет выполняться до тех пор, пока вы не остановите ее, нажав Ctrl + C. Если вы не прервете его, он просто продолжится.

Используя тайм-аут, мы можем убедиться, что ping не запускается постоянно, сокращая пропускную способность сети и докучая любому устройству, на которое выполняется проверка связи.

Следующая команда использует тайм-аут для ограничения пинга по времени. Мы даем 15 секунд времени выполнения для проверки связи.

таймаут 15 пинг 192.168.4.28 в окне терминала

По истечении 15 секунд сеанс проверки связи завершается, и мы возвращаемся в командную строку.

завершил сеанс ping в окне терминала

Использование тайм-аута с другими единицами времени

Обратите внимание, что нам не нужно было добавлять «s» после 15. тайм-аут предполагает, что значение указано в секундах. Вы можете добавить «s», но на самом деле это не имеет значения.

Чтобы использовать значение времени, измеряемое в минутах, часах или днях, добавьте «m», «h» или «d».

Чтобы выполнить команду ping в течение трех минут, используйте следующую команду:

таймаут 3м пинг 192.168.4.28 в окне терминала

ping будет работать в течение трех минут, прежде чем истечет время ожидания и остановит сеанс ping.

сеанс ping, запущенный в оконной вдове

Ограничение сбора данных с тайм-аутом

Некоторые файлы захвата данных могут очень быстро разрастаться. Чтобы такие файлы не стали громоздкими или даже проблемными по размеру, ограничьте время, в течение которого программа захвата может запускаться.

В этом примере мы используем tcpdump, захват сетевого трафика инструмент. На тестовых машинах, на которых проводилось исследование этой статьи, tcpdump уже был установлен в Ubuntu Linux и Fedora Linux. Его нужно было установить в Manjaro Linux и Arch Linux с помощью следующей команды:

sudo pacman -Syu tcpdump в окне терминала


Что случилось? Почему тайм-аут не остановил tcpdump?

Все дело в сигналах.

Отправка правильного сигнала

Когда тайм-аут хочет остановить программу, он отправляет Сигнал SIGTERM . Это вежливо попросит программу завершить работу. Некоторые программы могут игнорировать сигнал SIGTERM. Когда это происходит, нам нужно указать тайм-аут, чтобы он был немного сильнее.

Мы можем сделать это, задав вместо этого тайм-аут для отправки сигнала SIGKILL.

Мы можем использовать параметр -s (сигнал), чтобы указать тайм-аут для отправки сигнала SIGKILL.


Сначала вежливо спросить

Для этого мы используем параметр -k (убить после). Для параметра -k в качестве параметра требуется значение времени.

В этой команде мы запрашиваем тайм-аут, чтобы позволить dmesg работать в течение 30 секунд, а затем завершить его сигналом SIGTERM. Если dmesg все еще работает по прошествии 40 секунд, это означает, что дипломатический SIGTERM был проигнорирован и таймаут должен быть отправлен в SIGKILL для завершения работы.

timeout -k 40 30 dmseg -w в окне терминала

dmesg работает 30 секунд и останавливается, когда получает сигнал SIGTERM.

Вывод из dmesg в окне терминала

Мы знаем, что dmesg остановил не SIGKILL, потому что SIGKILL всегда оставляет в окне терминала некролог из одного слова: «Убито». В данном случае этого не произошло.

Получение кода выхода из программы

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

timeout предоставляет собственный код выхода, но нас это может не волновать. Нас, вероятно, больше интересует код выхода из процесса, которым управляет тайм-аут.

Проверь это - Как копировать и вставлять слои между файлами PSD с помощью сочетаний клавиш

Эта команда позволяет запускать команду ping в течение пяти секунд. Он проверяет связь с компьютером под названием Nostromo, который находится в тестовой сети, которая использовалась для исследования этой статьи.

таймаут 5 ping Nostromo.local в окне терминала

Команда выполняется в течение пяти секунд, и ее завершает тайм-аут. Затем мы можем проверить код выхода с помощью этой команды:

вывод пинга и эха $? в окне терминала

Если мы прервем программу с помощью Ctrl + C, код выхода из тайм-аута будет равен нулю.

таймаут 5 ping Nostromo.local в окне терминала с помощью Ctrl + C

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

Чтобы это произошло, программа должна остановиться сама по себе (другими словами, она не будет завершена по таймауту), и мы должны использовать параметр –preserve-status.

Если мы используем параметр -c (count) со значением пять, ping отправит только пять запросов. Если мы зададим таймаут длительностью в одну минуту, ping определенно завершится сам по себе. Затем мы можем проверить значение выхода с помощью echo.

timeout --preserve-status 1m ping -c 5 Nostromo.local в окне терминала

ping завершает свои пять запросов ping и завершается. Код выхода равен нулю.

таймаут --preserve-status 1m ping -c 5 NotHere.local в окне терминала

Установка основных правил

Читайте также: