2012-03-29 18 views

Odpowiedz

13

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> 
+4

Oznacza to również, że funkcje zarejestrowane za pomocą 'atexit.register()' nie będą wywoływane, jeśli proces zostanie zakończony przez 'SIGTERM'. –

+5

Dobrze, ale co to znaczy? Wyjść nieczysto? Zignorować to całkowicie? Coś innego? – Lucretiel

5

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.

+0

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

Powiązane problemy