Differenza tra segnale di kill meno violento -HUP (1) -INT (2) e -TERM (15)


32

A parte il più violento kill -9(SIGKILL), non capisco bene la differenza tra gli altri 3 segnali comuni ( qui ) -HUP(1), -INT(2) e -TERM(15).

In quali scenari funzionerebbe uno e l'altro no?

In generale, quando -9( -KILL) fallisce?

Per me, sembrano chiedere al processo di terminare con grazia , senza salvare . Valutare la durezza, direi -HUP < -TERM < -INT < -KILL.


HUPnon significa necessariamente che il programma verrà chiuso. Alcuni programmi utilizzano SIGHUPper ricaricare i file di configurazione. SIGKILLnon riesce, o piuttosto viene posticipato, quando il processo è in modalità di sospensione ininterrotta .
Muru,

Risposte:


52

SIGKILL non manca mai di uccidere un processo in esecuzione, questo è il punto. Esistono altri segnali per dare all'applicazione la possibilità di reagire.

Il comportamento predefinito di SIGINT, SIGTERM, SIGQUIT e SIGHUP è di uccidere il programma. Tuttavia, alle applicazioni è consentito installare un gestore per questi segnali. Quindi il comportamento reale delle applicazioni quando ricevono questi segnali è una questione di convenzione (che ogni applicazione può o meno seguire), non di progettazione del sistema.

SIGINT è il "più debole" del lotto. Il suo significato convenzionale è "interrompere ciò che stai facendo in questo momento e attendere ulteriori input dell'utente". È il segnale generato da Ctrl+ Cin un terminale. I programmi non interattivi generalmente lo trattano come SIGTERM.

SIGTERM è il segnale di uccisione "normale". Indica all'applicazione di uscire in modo pulito. L'applicazione potrebbe richiedere del tempo per salvare il suo stato, per liberare risorse come file temporanei che altrimenti rimarrebbero indietro, ecc. Un'applicazione che non vuole essere interrotta durante un'applicazione critica potrebbe ignorare SIGTERM per un po '.

SIGHUP è quasi uguale a SIGTERM in termini di durezza, ma ha un ruolo specifico perché viene automaticamente inviato alle applicazioni in esecuzione in un terminale quando l'utente si disconnette da quel terminale (etimologicamente, perché l'utente si stava connettendo tramite una linea telefonica e il modem riattaccato). SIGHUP è spesso involontario, a differenza di SIGTERM che deve essere inviato esplicitamente, quindi le applicazioni dovrebbero cercare di salvare il proprio stato su SIGHUP. SIGHUP ha anche un significato convenzionale completamente diverso per le applicazioni non rivolte all'utente ( daemon ), che è quello di ricaricare il loro file di configurazione.

SIGQUIT è il più duro dei segnali ignorabili. È pensato per essere usato quando un'applicazione si comporta male e deve essere uccisa ora, e per impostazione predefinita ha tradizionalmente lasciato un file di dump di base (sistemi moderni in cui la maggior parte degli utenti non saprebbe quale file di base tende a non produrli per impostazione predefinita) . Le applicazioni possono impostare un gestore, ma dovrebbero fare ben poco (in particolare non salvare alcuno stato) perché l'intento di SIGQUIT deve essere usato quando qualcosa è seriamente sbagliato.


Puoi approfondire il tema "salva il loro stato"? Se mi trovo in un editor di testo e lo uccido, suppongo che il contenuto non venga salvato.
Kenny,

2
@Kenny La maggior parte degli editor non salverà il file, perché potresti aver apportato modifiche temporanee che non intendevi salvare. Gli editor avanzati (ad es. Vi, emacs) hanno un file di salvataggio automatico in cui salvano i dati di volta in volta; su SIGHUP in genere si assicurano che il file di salvataggio automatico sia aggiornato.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.