Jak wysłać i złapać SIGTERM w Bash i Pythonie

Jak Wyslac I Zlapac Sigterm W Bash I Pythonie



W systemie Linux procesy komunikują się ze sobą za pomocą sygnałów. Sygnały działają jak przerwania programowe, które powiadamiają programy o różnych zdarzeniach lub żądaniach. Na przykład, gdy program jest uruchomiony, możesz wysłać sygnał zabicia, aby wyjść z programu. Wysyłany sygnał może wyzwalać różne akcje, takie jak zatrzymanie wykonywania, zakończenie programu, wznowienie wykonywania itp.

Podczas pracy z Bash i Pythonem możesz wysłać sygnał SIGTERM, aby miękko zakończyć uruchomiony proces. Ten post dotyczy wysyłania i przechwytywania SIGTERM w Bash i Pythonie.

Co to jest TERMIN ZNAKU

Systemy uniksowe mają trzy kategorie sygnałów: system, urządzenie i sygnały zdefiniowane przez użytkownika. Każdy sygnał ma wartość całkowitą. Możesz wykonać sygnał, podając jego nazwę lub wartość całkowitą.







SIGTERM to sygnał o wartości całkowitej równej 15. Jest wykonywany, gdy chcesz delikatnie zakończyć uruchomiony proces. Poniżej przedstawiono składnię używaną SIGTERM w Bash:



zabij TERMIN DOCELOWY < PID >

Lub

zabić - piętnaście < PID >

Możesz sprawdzić wszystkie dostępne sygnały za pomocą następującego polecenia:



zabić -l





Jak wysłać i złapać SIGTERM w Bash i Pythonie

Możesz chcieć wysłać i przechwycić SIGTERM w Bash i Pythonie w różnych przypadkach. Kiedy uruchamiasz program Bash lub Python, możesz wykonać sygnał SIGTERM, aby zabić program. Mamy różne przykłady, aby zrozumieć, w jaki sposób wysyłasz i przechwytujesz SIGTERM w Bash i Pythonie.

1. Korzystanie ze skryptu w języku Python

Korzystając z Pythona 1.4 i najnowszych wersji, możesz użyć biblioteki sygnałów do wysyłania i przechwytywania SIGTERM. Zaimportuj bibliotekę do swojego programu, aby określić, w jaki sposób program powinien przechwytywać i reagować na różne sygnały. Biblioteka sygnałów umożliwia utworzenie procedury obsługi sygnału w celu zgłaszania liczby całkowitej odebranego sygnału. Następnie możesz zarejestrować przechwycony sygnał i uzyskać informacje o bieżącym procesie, takie jak jego PID. Podajmy przykład.



Mamy skrypt Pythona, który przechwytuje liczbę całkowitą wysłanego sygnału. Ponadto przechwytuje PID bieżącego procesu.

Na poniższym obrazku wykonujemy skrypt Pythona i mamy pętlę while, która jest wykonywana co kilka sekund. Na innym terminalu możemy wysłać sygnał SIGTERM, aby zabić proces, określając PID, który otrzymamy po wykonaniu skryptu Pythona:

Po wysłaniu sygnału SIGTERM zauważamy, że skrypt przestaje działać. To dlatego, że przechwytuje liczbę całkowitą sygnału. W tym przypadku wykonujemy kill -15 dla sygnału SIGTERM. Możesz także wysłać sygnał zabicia SIGTERM, używając słowa kluczowego SIGTERM zamiast jego wartości całkowitej. Nadal otrzymujemy ten sam wynik.

Możesz także wykonać zadanie w Pythonie, używając następującej składni:

python3 < skrypt/zadanie > &

W przeciwieństwie do pierwszej metody, kiedy wysyłamy SIGTERM za pomocą tej opcji, możemy zobaczyć, że identyfikator zadania jest drukowany, gdy zadanie zaczyna się wykonywać. Po zabiciu go otrzymujemy status „gotowe”. SIGTERM można wysłać, podając jego nazwę lub liczbę całkowitą.

2. Korzystanie ze skryptu Bash

Możesz użyć polecenia „trap”, aby złapać sygnał podczas wykonywania skryptu Bash. W tym przykładzie dodaliśmy polecenie „trap”, aby przechwycić sygnał SIGTERM. Skrypt jest pętlą „for” wykonującą polecenie „data” tysiąc razy, jeśli nie zostanie wysłany żaden sygnał SIGTERM.

Podczas wykonywania skryptu Bash możesz wysłać sygnał SIGTERM, naciskając Ctrl + Z klawisze klawiatury. Polecenie „trap” przechwytuje przesyłany sygnał, a pętla „for” zakończy wykonywanie. Otrzymasz wyjście potwierdzające, że uruchomione zadanie otrzymało sygnał SIGTERM i zostało zatrzymane.

W ten sposób wysyłasz i przechwytujesz SIGTERM w Bash.

Wniosek

Możesz wysyłać różne sygnały, aby osiągnąć różne cele podczas wykonywania zadania lub programu. SIGTERM jest wysyłany w celu miękkiego zatrzymania programu. W przypadku Pythona do przechwycenia sygnału potrzebny jest moduł obsługi sygnału, a SIGTERM można wysłać za pomocą polecenia „kill”. Możesz użyć polecenia „trap” i klawiszy klawiatury w Bash, aby przechwycić i wysłać sygnał SIGTERM. W tym poście szczegółowo przedstawiono różne przykłady, jak to osiągnąć.