Как отправить и перехватить SIGTERM в Bash и Python

Kak Otpravit I Perehvatit Sigterm V Bash I Python



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

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

Что такое СРОК ЗНАКА

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







SIGTERM — это сигнал с целочисленным значением 15. Он выполняется, когда вы хотите мягко завершить запущенный процесс. Ниже приведен синтаксис для использования SIGTERM в Bash:



убить ЦЕЛЕВОЙ СРОК < ПИД >

или

убить - пятнадцать < ПИД >

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



убить -л





Как отправить и перехватить SIGTERM в Bash и Python

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

1. Использование скрипта Python

При использовании Python 1.4 и последних версий вы можете использовать библиотеку сигналов для отправки и перехвата SIGTERM. Импортируйте библиотеку в свою программу, чтобы определить, как ваша программа должна захватывать различные сигналы и реагировать на них. Библиотека сигналов позволяет вам создать обработчик сигнала, чтобы сообщить целое число полученного сигнала. Затем вы можете зарегистрировать захваченный сигнал и получить информацию о текущем процессе, такую ​​как его PID. Приведем пример.



У нас есть скрипт Python, который перехватывает целое число отправленного сигнала. Более того, он ловит PID текущего процесса.

На следующем изображении мы выполняем скрипт Python и имеем цикл while, который выполняется каждые несколько секунд. На другом терминале мы можем отправить сигнал SIGTERM, чтобы убить процесс, указав PID, который мы получаем от выполнения скрипта Python:

Как только мы отправим сигнал SIGTERM, мы заметим, что скрипт перестает выполняться. Это потому, что он захватывает целое число сигнала. В этом случае мы выполняем kill -15 для сигнала SIGTERM. Вы также можете отправить сигнал уничтожения SIGTERM, используя ключевое слово SIGTERM вместо его целочисленного значения. Мы по-прежнему получаем тот же результат.

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

питон3 < сценарий/работа > &

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

2. Использование сценария Bash

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

При выполнении сценария Bash вы можете отправить сигнал SIGTERM, нажав кнопку Ctrl + Z клавиши клавиатуры. Команда «trap» захватывает передаваемый сигнал, и цикл «for» перестает выполняться. Вы получите вывод, который подтверждает, что выполняющееся задание получило сигнал SIGTERM и остановилось.

Вот как вы отправляете и перехватываете SIGTERM в Bash.

Заключение

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