2013-06-21 26 views
6

Jaka jest różnica między sygnałem SIGINT a sygnałem SIGTERM? Wiem, że SIGINT jest odpowiednikiem naciśnięcia Ctrl + C na klawiaturze, ale co to jest SIGTERM? Gdybym chciał z zaciekawieniem zatrzymać proces w tle, z których z nich powinienem skorzystać?kill -INT vs kill -TERM

Odpowiedz

10

Jedyna różnica w odpowiedzi zależy od programisty. Jeśli programista chce, aby aplikacja odpowiadała na SIGTERM inaczej niż na SIGINT, zostaną zarejestrowane różne procedury obsługi. Jeśli chcesz zatrzymać proces w tle z wdziękiem, zwykle wysyłasz SIGTERM. Jeśli tworzysz aplikację, odpowiedz na numer SIGTERM, wychodząc z wdziękiem. SIGINT jest często obsługiwany w ten sam sposób, ale nie zawsze. Na przykład często wygodnie jest odpowiadać na SIGINT przez zgłaszanie statusu lub częściowe obliczenia. Ułatwia to użytkownikowi uruchomienie aplikacji na terminalu w celu otrzymania częściowych wyników, ale nieco trudniejsze do zakończenia programu, ponieważ zazwyczaj wymaga od użytkownika otwarcia kolejnej powłoki i wysłania SIGTERM przez kill. Innymi słowy, zależy to od aplikacji, ale zgodnie z konwencją należy odpowiedzieć na SIGTERM, zamykając się z wdziękiem, domyślną akcją dla obu sygnałów jest zakończenie, a większość aplikacji odpowiada na SIGINT, zatrzymując się z wdziękiem.

6

Jeśli chciałbym z wdziękiem zatrzymać proces w tle, z których z nich powinienem skorzystać?

Lista UNIX sygnałów sięgają do czasów, gdy komputery miały zaciski szeregowe i modemy, czyli tam, gdzie pojęcie terminala sterującego wywodzi. Gdy modem odrzuci nośnik, linia jest zawieszona podwieszona.

SIGHUP (1) oznacza zatem utratę połączenia, wymuszając zamknięcie lub ponowne uruchomienie programów. Dla daemon jak syslogd i sshd, procesy bez połączenia terminalowego, które powinny działać, SIGHUP jest zwykle sygnałem używanym do restartu lub resetowania.

SIGINT (2) i SIGQUIT (3) są dosłownie "przerwane" lub "zakończone", "z klawiatury", dając użytkownikowi natychmiastową kontrolę, czy program się zawiedzie. Z terminalem opartym na znakach fizycznych byłby to jedyny sposób na zatrzymanie programu!

SIGTERM (15) nie jest powiązany z żadnym terminalem i może być wysłany tylko z innego procesu. Byłby to konwencjonalny sygnał wysyłany do procesu w tle.

0

SIGINT to sygnał przerwania programu, , który zostanie wysłany, gdy użytkownik naciśnie Ctrl + C. SIGTERM to sygnał zakończenia, który zostanie wysłany do procesu, aby zażądać zakończenia procesu, ale może zostać przechwycony lub zignorowany przez ten konkretny proces.