2014-04-02 13 views
5

w bash skryptu obsłużyć inny sygnał, co następuje:Dlaczego nie otrzymuję sygnału SIGKILL przy komendzie kill -9 w bash?

#!/bin/bash 

sighdl() 
{ 
    echo "signal caught" 
    #do something 
    exit 0 
} 

trap sighdl SIGKILL SIGINT SIGTERM 

Powyższy kod sygnał uchwyt prawidłowo następującej działalności:

  1. Ctrl + C
  2. kill pid
  3. pkill scriptname

Dla kill -9 pid nie wywołuje sighdl. Zgodnie z moim rozumieniem (jeśli się nie mylę) kill -9 wysyła sygnał SIGKILL.

Każdy pomysł?

+1

Od człowieka '-9 KILL (niezrozumiałe, nie do pomylenia zabójstwo)' oznacza to, że nie nazwie 'sighdl'? –

+0

Sig kill nie może zostać przechwycony ... Istnieją dwa sygnały, które nie mogą zostać przechwycone SIGKILL i SIGSTOP –

+0

@ Q_SaD..Any sposób powiadomienia mojego skryptu na komendzie 'kill -9'? –

Odpowiedz

8

Nie możesz tego zrobić. Tak 9 to SIGKILL, a system uniksowy według projektu nie pozwala na przechwytywanie SIGKILL skryptów/programów ze względów bezpieczeństwa. W przeciwnym razie każdy skrypt może pułapkować & ignorować SIGKILL, co uniemożliwi zakończenie tego skryptu przez system operacyjny.

+0

ok .. mogę dołączyć sygnał zdefiniowany przez użytkownika za pomocą 'kill -9'? Ponieważ muszę powiadomić skrypt, gdy użytkownik zabija proces skryptu w jakikolwiek sposób. –

+0

Nie możesz powiadomić, gdy użytkownik wyśle ​​'kill -9'. Każdy inny sygnał, który możesz złapać i obsłużyć. – anubhava

+3

@Jayesh Mówiąc najprościej, jest to błąd * użytkownika, a nie skryptu, jeśli skrypt nie może poprawnie się posprzątać po wysłaniu przez użytkownika 'SIGKILL'. Pomyśl o tym w ten sposób: system operacyjny nie może poprawnie zamknąć się, jeśli chcesz odłączyć komputer (lub wyciągnąć baterię), a "SIGKILL" to oprogramowanie równoważące ciągnięcie wtyczki do procesu. – chepner

Powiązane problemy