Otrzymuję wiele mieszanych wiadomości od ludzi i zastanawiałem się, czy tak naprawdę nie ma dużej różnicy w tym, czego używasz.
kill 'x'
killall 'x'
kill -9 'x'
Oto niektóre opcje, z których dotychczas korzystałem, ale niektórzy twierdzą, że zabicie -9 to po prostu przesada, zabójstwo samo w sobie nie działa itp.
Czy ktoś ma jakąś radę na temat tego, z której należy skorzystać w najbardziej standardowym przypadku po prostu zakończenia procesu (a więc i jego stanu)?
[edytuj] Szukam, czego użyć, gdy chcesz zatrzymać wykonywanie procesu, abyś mógł uruchomić nowy, nowy od samego początku
SIGKILL
.kill -l
i przetłumaczyć liczbę na odpowiadającą jej nazwę, np .kill -l 9
PowróciKILL
.Odpowiedzi:
Istnieje wiele sygnałów, których domyślnym rozwiązaniem jest zakończenie procesu. Ostatecznym sygnałem zakończenia jest SIGKILL, ponieważ nie można go obsłużyć, a proces nie ma innego wyjścia, jak śmierć. Oznacza to jednak również, że jeśli go wyślesz, proces zostanie pozbawiony możliwości oczyszczenia. Dlatego dobre maniery wymagają wysłania sygnału takiego jak SIGTERM, który można obsłużyć jako pierwszy i tylko jeśli proces nie zakończy się po pewnym czasie, wyślij go SIGKILL.
Należy zauważyć, że SIGINT i SIGQUIT nie są dobrymi kandydatami do arbitralnego zakończenia procesu. Ze względu na fakt, że można je generować z klawiatury terminala, wiele aplikacji używa ich do specjalnych celów. Na przykład interpreter Pythona używa SIGINT do generowania
KeyboardInterrupt
wyjątku (także w interaktywnych sesjach Pythona, w których po prostu wraca do monitu), a JVM używa SIGQUIT do zrzucania śladów stosu. SIGINT i SIGQUIT pozostają skuteczne dla większości standardowych narzędzi wiersza poleceń, takich jakfind
lubcat
.Podczas zamykania systemu większość systemów UNIX i Linux wysyła SIGTERM do wszystkich procesów, po czym następuje 5 sekund oczekiwania, a następnie SIGKILL. Jest to zalecany sposób bezpiecznego zamknięcia dowolnego procesu.
Zauważ również, że nawet SIGKILL może nie zakończyć procesu utknięcia w nieprzerwanym oczekiwaniu, aż proces się obudzi.
źródło
kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;
rekomendacji?SIGHUP
pochodzi z dnia, w którym linie telefoniczne były powszechne. Ten sygnał został wysłany, aby wskazać, że linia się rozłączyła. Później, gdy było to mniej powszechne,SIGHUP
demony używały czasem do ponownego odczytu pliku konfiguracyjnego bez ponownego uruchamiania procesu. W dzisiejszych czasachSIGHUP
jest rzadko używany. Wiele demonów będzie miało swój własny sposób na ponowne zainicjowanie (tj .apachectl graceful
Lubrndc reconfig
. W przypadku rzeczy, których nie należy, należy używać[init.d|smf|upstart|launchd]
kontroli tam, gdzie to możliwe.Powinieneś zacząć od najłagodniejszego i eskalować od tego miejsca. Oznacza to, SIGINT, SIGTERM, SIGQUIT, SIGKILL. Chociaż większość ludzi pomija SIGINT i SIGQUIT.
źródło