Rozumiem, że to nie na temat, nie mogłem znaleźć nigdzie w Internecie i pomyślałem, że może guru programowania w społeczności mogą to wiedzieć.
Zwykle używam
kill -9 pid
zabić robotę. Zawsze zastanawiałem się, skąd pochodzi 9. Wyszukałem to w Internecie i jest napisane
„9 oznacza sygnał KILL, którego nie można złapać ani zignorować. Innymi słowy, sygnalizowałoby to natychmiastowe zakończenie procesu (niektóre uruchomione aplikacje)” (źródło: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )
Ale dlaczego 9? a co z innymi liczbami? czy jest jakieś znaczenie historyczne lub ze względu na architekturę Uniksa?
Odpowiedzi:
Zobacz artykuł Wikipedii o sygnałach Unix, aby zapoznać się z listą innych sygnałów. SIGKILL po prostu przypadkiem otrzymał numer 9.
Możesz równie dobrze używać mnemoników, jak liczb:
źródło
Było 8 innych sygnałów, które wymyślili jako pierwsi.
źródło
Myślę, że lepszą odpowiedzią jest po prostu to:
Jeśli chodzi o „znaczenie” 9 ... powiedziałbym, że prawdopodobnie nie ma żadnego. Zgodnie z The Linux Programming Interface (s. 388) :
źródło
Najpierw musisz wiedzieć, czym są sygnały w systemach uniksopodobnych (zajmie to tylko kilka minut).
Istnieje kilka typów Sygnałów, których możemy użyć - aby uzyskać pełną listę wszystkich dostępnych / możliwych Sygnałów, użyj polecenia " $ kill -l ":
Na powyższym wyjściu widać wyraźnie, że każdy Sygnał ma powiązany z nim „ numer sygnału ” (np. 1, 2, 3) i „ nazwę sygnału ” (np. SIGUP, SIGINT, SIGQUIT). Aby uzyskać szczegółowe informacje o tym, co robi każdy Signal, odwiedź ten link .
Na koniec, przechodząc do pytania „Dlaczego numer 9 w poleceniu kill -9 ”:
Istnieje kilka metod dostarczania sygnałów do programu lub skryptu. Jedną z powszechnie stosowanych metod wysyłania sygnału jest użycie polecenia kill - podstawowa składnia to:
Gdzie sygnał to numer lub nazwa sygnału, po którym następuje identyfikator procesu (pid), do którego sygnał zostanie wysłany.
Na przykład - -SIGKILL (lub -9 ), sygnał natychmiast zabija proces.
i
obie komendy są tym samym, tzn. powyżej użyliśmy „nazwy sygnału”, a później „numeru sygnału”.
Werdykt : jeden ma otwarty wybór, czy użyć „nazwy sygnału” czy „numeru sygnału” z poleceniem zabicia .
źródło
To nawiązanie do „Revoulution 9” The Beatles. Zbiór połączonych ze sobą klipów dźwiękowych i znalezionych dźwięków, w tym nagraniu John Lennon powtarza w kółko „Numer 9, Numer 9…”. Ponadto, ta piosenka przyciągnęła uwagę w 1969 roku, kiedy odkryto, że odtwarzany od tyłu John wydawał się mówić „Podkręć mnie, trupie ...”
Dlatego dziewiąty sygnał miał być najbardziej śmiercionośnym z sygnałów zabijania.
źródło
Istnieje bardzo długa lista sygnałów uniksowych, które można przeglądać w Wikipedii . Nieco mylące, możesz faktycznie użyć
kill
do wysłania dowolnego sygnału do procesu. Na przykładkill -SIGSTOP 12345
wymusza na procesie 12345 wstrzymanie wykonywania, a jednocześniekill -SIGCONT 12345
nakazuje wznowienie. Nieco mniej tajemnicza wersjakill -9
tokill -SIGKILL
.źródło
kill
. Prawdopodobnie dlatego, że domyślnym zachowaniem dla większości pierwotnego zestawu sygnałów (numery od 1 do 15) było zakończenie procesu.Nie sądzę, aby cyfra 9. miała jakiekolwiek znaczenie. Ponadto, wbrew powszechnemu przekonaniu,
kill
służy nie tylko do zabijania procesów, ale także do wysyłania sygnału do procesu. Jeśli jesteś naprawdę ciekawy, możesz przeczytać tutaj i tutaj .źródło
dlaczego zabić -9: numer 9 na liście sygnałów został wybrany jako SIGKILL w odniesieniu do „zabicia 9 żyć kota”.
źródło
SIGKILL
użyj, aby zabić proces.SIGKILL
nie można zignorować ani obsłużyć. W Linuksie sposoby dawaniaSIGKILL
.źródło
Wpisz polecenie kill -l w powłoce
dowiesz się, że pod numerem 9 [ 9) SIGKILL ], więc można użyć kill -9 lub kill -SIGKILL
SIGKILL to z pewnością sygnał zabicia, nie można go przestawiać, ignorować ani obsługiwać. Zawsze działa z domyślnym zachowaniem, które polega na zabiciu procesu.
źródło
Jest
-9
to numer_sygnału i określa, że wysłany komunikat o zabiciu powinien być typu KILL (nie do przechwycenia, nie do zignorowania).Który jest taki sam jak poniżej.
Bez określenia signal_number domyślną wartością jest -15, czyli TERM (sygnał zakończenia oprogramowania). Wpisywanie
kill <pid>
jest takie samo jakkill -15 <pid>
.źródło
Oba są takie same, jak kill -sigkill identyfikator procesu, kill -9 identyfikator procesu. Zasadniczo służy do wymuszonego zakończenia procesu.
źródło
jest jakiś proces, którego nie można zabić, jak to "zabij% 1". jeśli musimy zakończyć ten proces, używana jest specjalna komenda do zabicia tego procesu, czyli kill -9. np. otwórz vim i zatrzymaj się, jeśli używając ctrl + z, zobacz zadania i po zastosowaniu procesu kill ten proces nie zostanie zakończony, więc tutaj używamy polecenia kill -9 do zakończenia.
źródło