Co Python robi domyślnie pod osłonami, jeśli otrzymuje SIGTERM, ale nie ma zarejestrowanej obsługi sygnału?Python: Jaka jest domyślna obsługa SIGTERM?
Odpowiedz
Nic. Sam Python nie rejestruje dla niego procedury obsługi sygnału. Można to sprawdzić w interaktywnym tłumacza:
>>> import signal
>>> signal.signal(signal.SIGTERM, signal.SIG_DFL)
0
>>> signal.SIG_DFL
0
To pokazuje signal.signal()
powrocie signal.SIG_DFL dla signal.SIGTERM
. Kontrast to signal.SIGINT
, który ma obsługi sygnału domyślny (co podnosi KeyboardInterrupt
):
>>> signal.signal(signal.SIGINT, signal.SIG_DFL)
<built-in function default_int_handler>
budynek na odpowiedź Thomas Wouters, pyton nie zarejestrować obsługi dla sygnału SIGTERM. Możemy to zobaczyć:
In[23]: signal.SIG_DFL == signal.signal(signal.SIGTERM,signal.SIG_DFL)
Out[23]: True
Oznacza to, że system podejmie domyślną akcję. W systemie Linux domyślną akcją (zgodnie z the signal man page) dla SIGTERM jest zakończenie procesu.
Zakończenie procesu oznacza, że:
proces po prostu nie przeznacza żadnych więcej plasterków czas, w którym może on wykonywać kod.
- To oznacza, że nie podniesie wyjątek, lub zadzwoń kod w try: koniec: bloki lub wyjście metoda menedżerów kontekście. Nie zrobi tych rzeczy, ponieważ ten konkretny interpreter pytonów nigdy nie będzie miał szansy na wykonanie innej instrukcji.
Pamięć procesowa i inne zasoby (otwarte pliki, gniazda sieciowe itp.) Zostaną zwrócone z powrotem do reszty systemu.
To jest tak prawdziwe, ważne i - przynajmniej dla mnie - nieintuicyjne. Sądziłem, że cała sprawa klauzul końcowych i \ __ exit__ metod menedżerów kontekstu miała na celu sprawdzenie, czy dany kod jest zawsze uruchamiany (z wyjątkiem SIGKILL, o którym wiedziałem, że jest obsługiwany na poziomie systemu). Walczyłem z tym kilka dni i dopiero teraz uświadomiłem sobie, że już tu przedstawiłeś swoją odpowiedź. Muszę o tym pamiętać. – matlehmann
- 1. Jaka jest wartość domyślna elementu w tablicy?
- 2. Jaka jest domyślna czcionka dla ggplot2
- 3. SQL: Jaka jest domyślna kolejność zapytań?
- 4. Jaka jest domyślna ścieżka debug.keystore na Macu?
- 5. Jaka jest domyślna strefa czasowa w java.util.Date
- 6. Jaka jest domyślna metoda HTTP formularza?
- 7. Python - Flask Domyślna trasa jest możliwa?
- 8. Jaka jest wartość domyślna dla członków klasy C++?
- 9. Jaka jest domyślna częstotliwość animacji klawiatury telefonu iPhone?
- 10. Jaka jest domyślna nazwa pola tekstowego dla Summernote?
- 11. Jaka jest domyślna wartość atrybutu "position" dla DIV?
- 12. Jaka jest wartość domyślna (IEnumerable <T>)?
- 13. Jaka jest domyślna kolejność listy zwróconej przez wywołanie filtru Django?
- 14. Jaka jest domyślna lista stopwords użytych w StopFilter Lucene?
- 15. Jaka jest domyślna rodzina czcionek w systemie Android?
- 16. Jaka jest domyślna wartość ConnectTimeout w ciągu połączenia?
- 17. Jaka jest domyślna ścieżka do bazy danych dla MongoDB?
- 18. Jaka jest domyślna nazwa użytkownika dla instancji SSH EC2 Linux?
- 19. wspornik haskells na SIGTERM
- 20. Obsługa tablic - Python
- 21. Obsługa wyjątków Python
- 22. bash rura SIGTERM
- 23. Uruchom plik python - jaka funkcja jest główna?
- 24. Co to jest domyślna implementacja `hashCode`?
- 25. Konstruktor języka Python i wartość domyślna
- 26. Heroku loguje FATAL SignalException: SIGTERM
- 27. Python argparse: wartość domyślna lub podana wartość
- 28. Domyślna domyślna kreska działania
- 29. Java Hibernate z Persistence Question --- jeśli FetchType nie jest zdefiniowany, jaka jest domyślna metoda?
- 30. Powiązana relacja danych podstawowych - jak jest zarządzana lub jaka jest domyślna kolejność?
Oznacza to również, że funkcje zarejestrowane za pomocą 'atexit.register()' nie będą wywoływane, jeśli proces zostanie zakończony przez 'SIGTERM'. –
Dobrze, ale co to znaczy? Wyjść nieczysto? Zignorować to całkowicie? Coś innego? – Lucretiel