В операционной системе Linux некоторые процессы выполняются непрерывно, и для их завершения через определенное время используется служебная программа командной строки, называемая «Timeout».
«Timeout» позволяет пользователю выполнить команду, а затем завершить ее по истечении заданного времени. Другими словами, «Timeout» упрощает выполнение команды в течение определенного времени. Команда timeout включена в основной набор утилит GNU, который входит в стандартную комплектацию почти каждой системы Linux.
В описании мы рассмотрим основы этой команды с примерами.
Синтаксис
Команда «timeout» имеет следующий синтаксис:
timeout [option] [Duration] [command]
Продолжительность может быть в виде плавающих целых чисел с суффиксом времени:
s/no suffix (when no suffix unit is fixed it consider to second) m= minute h= hour d= day
Отправьте эхо-запрос на вашу систему с IP-адресом, он будет продолжать работу до тех пор, пока вы не отключите его, нажав CTRL + C.
Теперь установите время для его завершения с помощью команды «timeout». Например, я установлю время на 7, что означает, что выполнение команды ping остановится через 7 секунд.
Следуйте приведенной ниже команде, чтобы установить ограничение по времени:
$ timeout 7 ping 192.168.18.213
Точно так же мы можем пинговать «yandex.ru», используя:
$ ping yandex.ru
Чтобы остановить команду «ping» через 1 минуту, введите в терминале следующую команду:
$ timeout 1m ping yandex.ru
Многие программы отправляют значение/код в оболочку при завершении работы.
Например, завершите следующий процесс до того, как он достигнет своего ограничения по времени, равного 6 секундам. Нажмите CTRL + C и проверьте статус выхода, набрав «echo $». На выходе он вернет «0»:
$timeout 6 ping yandex.ru
Прерывание запущенного процесса всегда дает код выхода «0».
Preserve status возвращает статус выхода, даже если мы завершаем его принудительно с помощью CTRL + C. Команда будет такой:
$ timeout --preserve-status 2 ping yandex.ru
И чтобы проверить код выхода, введите:
$ echo $?
Теперь статус выхода будет 143.
Команда «timeout» посылает процессу сигнал о его завершении.
Чтобы проверить доступные сигналы, используйте команду «kill»:
$ kill -l
Будет отображен список всех доступных сигналов.
Параметр «-s» (–signal) позволяет вам установить сигнал, который будет выдавать:
$ timeout -s <command>
Команда «timeout» использует «SIGTERM» для остановки процесса, но многие процессы игнорируют сигнал «SIGTERM». Принудительное завершение процесса с использованием сигнала «SIGKILL» не может игнорироваться никаким процессом.
Отправив SIGKILL команде ping через 2 секунды, введите:
$ sudo timeout -s SIGKILL ping yandex.ru
Вы также можете отправлять сигналы, используя номер сигнала вместо имени сигнала:
$ sudo timeout -s 9 ping 192.168.18.213
Отправка сигналов об убийстве
Параметр «-k» используется для завершения процесса.
В следующем примере, если соединение не устанавливается в течение 2 минут, команда timeoutа прерывается через 3 секунды:
$ sudo timeout –k 3 2m ping yandex.ru
В моем случае команда timeout будет работать в течение 2 минут и не будет завершена. Следовательно, он не убьет даже через 3 секунды.
У Linux есть очень хорошая функция, заключающаяся в том, что она помогает справиться с каждой используемой нами командой. Использование «help» в имени команды предоставит вам подробную справочную информацию:
$ timeout --help
Чтобы проверить версию команды timeoutа, введите:
$ timeout --version
В операционной системе Linux команда «timeout» – это служебная программа командной строки, которая используется для завершения запущенного процесса по истечении заданного периода. Он используется для процессов, которые выполняются непрерывно. Более того, статус выхода запущенных процессов также можно получить с помощью команды «timeout». Мы обсуждали команды timeoutа на разных примерах с несколькими вариантами.