Как да изпращате и улавяте SIGTERM в Bash и Python

Kak Da Izprasate I Ulavate Sigterm V Bash I Python



В Linux процесите комуникират помежду си чрез сигнали. Сигналите действат като софтуерни прекъсвания, които уведомяват програмите за различни събития или заявки. Например, когато дадена програма работи, можете да изпратите сигнал за изключване, за да излезете от програмата. Изпратеният сигнал може да задейства различни действия като спиране на изпълнение, прекратяване на програмата, възобновяване на изпълнението и т.н.

Когато работите с Bash и Python, можете да изпратите сигнала SIGTERM, за да прекратите меко изпълнявания процес. Тази публикация обхваща изпращането и прихващането на SIGTERM в Bash и Python.

Какво е SIGN TERM

Unix системите имат три категории сигнали: система, устройство и дефинирани от потребителя сигнали. Всеки сигнал има цяло число. Можете да изпълните сигнала, като посочите неговото име или неговата целочислена стойност.







SIGTERM е сигнал с цяло число 15. Той се изпълнява, когато искате да прекратите работещ процес безпроблемно. Следва синтаксисът за използване на SIGTERM в Bash:



убийте ЦЕЛЕВ СРОК < PID >

или

убивам - петнадесет < PID >

Можете да проверите всички налични сигнали, като използвате следната команда:



убивам -л





Как да изпращате и улавяте 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, като използвате следния синтаксис:

python3 < сценарий/работа > и

За разлика от първия метод, когато изпращаме SIGTERM с помощта на тази опция, можем да видим, че идентификаторът на заданието се отпечатва, когато заданието започне да се изпълнява. След като го убием, получаваме статус „готово“. SIGTERM може да бъде изпратен чрез посочване на неговото име или цяло число.

2. Използване на Bash скрипт

Можете да използвате командата „trap“, за да хванете сигнал, когато изпълнявате Bash скрипт. В този пример добавихме командата „trap“, за да уловим сигнала SIGTERM. Скриптът е „за“ цикъл за изпълнение на командата „дата“ хиляди пъти, ако не бъде изпратен сигнал SIGTERM.

Когато изпълнявате скрипта Bash, можете да изпратите сигнала SIGTERM, като натиснете Ctrl + Z клавиши на клавиатурата. Командата „trap“ улавя предавания сигнал и цикълът „for“ ще спре да се изпълнява. Ще получите изход, който потвърждава, че изпълняваната задача е получила сигнал SIGTERM и е спряла.

Ето как изпращате и улавяте SIGTERM в Bash.

Заключение

Можете да изпращате различни сигнали за постигане на различни цели, когато изпълнявате задача или програма. SIGTERM се изпраща за плавно спиране на програма. За Python се нуждаете от манипулатор на сигнали, за да уловите сигнал и можете да изпратите SIGTERM с помощта на командата „kill“. Можете да използвате командата „trap“ и клавишите на клавиатурата на Bash, за да уловите и изпратите сигнала SIGTERM. Тази публикация представи различни примери за това как да постигнете това в детайли.