W systemach POSIX sygnały kończące mają zwykle następującą kolejność (zgodnie z wieloma stronami MAN i specyfikacją POSIX):
SIGTERM - uprzejmie poproś o zakończenie procesu. Zakończy się z wdzięcznością, czyszcząc wszystkie zasoby (pliki, gniazda, procesy potomne itp.), Usuwając pliki tymczasowe i tak dalej.
SIGQUIT - silniejsza prośba. Zakończy bez gracji, nadal czyści zasoby, które absolutnie wymagają oczyszczenia, ale może nie usunie plików tymczasowych, może zapisuje gdzieś informacje debugowania; w niektórych systemach zostanie również zapisany zrzut rdzenia (niezależnie od tego, czy sygnał zostanie przechwycony przez aplikację, czy nie).
SIGKILL - najsilniejsza prośba. Proces nie jest nawet proszony o zrobienie czegokolwiek, ale system oczyści proces, czy tak będzie, czy nie. Najprawdopodobniej zapisywany jest zrzut pamięci.
Jak SIGINT pasuje do tego obrazu? Proces CLI jest zwykle przerywany przez SIGINT, gdy użytkownik trafi na CRTL + C, jednak proces w tle może być również zakończony przez SIGINT przy użyciu narzędzia KILL. To, czego nie widzę w specyfikacjach lub plikach nagłówkowych, to to, czy SIGINT jest mniej lub bardziej skuteczny niż SIGTERM lub czy w ogóle istnieje różnica między SIGINT i SIGTERM.
AKTUALIZACJA:
Najlepszy opis sygnałów kończących, jaki do tej pory znalazłem, znajduje się w dokumentacji GNU LibC . Wyjaśnia bardzo dobrze, że istnieje zamierzona różnica między SIGTERM a SIGQUIT.
Mówi o SIGTERM:
To normalny sposób, aby uprzejmie poprosić program o zakończenie.
I mówi o SIGQUIT:
[...] i tworzy zrzut pamięci po zakończeniu procesu, tak jak sygnał błędu programu. Można o tym myśleć jako o stanie błędu programu „wykrytym” przez użytkownika. [...] Podczas obsługi SIGQUIT najlepiej pomijać pewne rodzaje porządków. Na przykład, jeśli program tworzy pliki tymczasowe, powinien obsłużyć inne żądania zakończenia, usuwając pliki tymczasowe. Ale lepiej, aby SIGQUIT ich nie usuwał, aby użytkownik mógł je sprawdzić w połączeniu ze zrzutem jądra.
SIGHUP jest również wystarczająco dobrze wyjaśniony. SIGHUP nie jest tak naprawdę sygnałem zakończenia, oznacza po prostu "utratę połączenia" z użytkownikiem, więc aplikacja nie może oczekiwać, że użytkownik odczyta dalsze dane wyjściowe (np. Wyjście stdout / stderr) i nie ma żadnych danych wejściowych, których można oczekiwać od użytkownika już. W przypadku większości aplikacji oznacza to, że lepiej zakończyć. Teoretycznie aplikacja może również zdecydować, że przechodzi w tryb demona po odebraniu SIGHUP i działa teraz jako proces w tle, zapisując dane wyjściowe do skonfigurowanego pliku dziennika. W przypadku większości demonów, które już działają w tle, SIGHUP zwykle oznacza, że powinny ponownie przeanalizować swoje pliki konfiguracyjne, więc po edycji plików konfiguracyjnych należy wysłać je do procesów w tle.
Jednak na tej stronie nie ma żadnego użytecznego wyjaśnienia SIGINT, poza tym, że jest on wysyłany przez CRTL + C. Czy jest jakiś powód, dla którego ktoś miałby traktować SIGINT inaczej niż SIGTERM? Jeśli tak, jaki byłby to powód i jak zmieniłaby się obsługa?
sudo fuser -l
w wierszu poleceń. Dla mnie to wywołuje:HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
kill -l
uzyskać listę sygnałów.