Numeri dei segnali di kill di Linux
Questo tutorial spiega cosa sono i kill signal di Linux e come usarli per interrompere, terminare, sospendere e continuare i processi.
Che cosa sono i segnali di uccisione di Linux?
I segnali kill consentono l'interazione tra diversi processi. Concretamente i segnali sono notifiche di eventi inviate ai processi principalmente per interrompere, terminare, uccidere o sospendere i processi (ecco perché usiamo il termine "kill"). I segnali possono essere inviati dai processi o dal kernel e normalmente vengono inviati quando un'anomalia o una condizione eccezionale richiede un'elaborazione speciale o quando un utente interrompe o termina manualmente un processo (ad esempio premendo Ctrl+C),
Quando un segnale viene inviato a un processo, quel segnale, o notifica, può soddisfare un'azione predefinita come risposta o può essere gestito da un gestore di segnale. Un gestore di segnale è un codice personalizzato del programma il cui processo ha ricevuto il segnale, che definisce il comportamento del processo quando viene ricevuto il segnale (ad eccezione dei segnali SIGKILL e SIGSTOP, che non possono essere gestiti, ignorati o bloccati).
Quando viene inviato il segnale, le azioni predefinite che possono verificarsi sono le seguenti:
Termine: il processo viene terminato.
-
Ign: il segnale viene ignorato senza influenzare il processo.
Core: viene creato un file dump-core.
Stop: il processo viene interrotto.
Continua: il processo riprende dopo essere stato interrotto.
A seconda del segnale possono verificarsi alcune di queste azioni, il programma può anche contenere un gestore di segnale per eseguire l'azione corretta.
Riassumendo: i segnali sono messaggi recapitati ai processi che notificano loro un evento verificatosi.
Segnali disponibili:
Per elencare tutti i nomi e i numeri dei segnali sul tuo sistema, puoi utilizzare il comando kill seguito dal flag -l, come mostrato di seguito.
Come puoi vedere, ci sono 64 segnali, probabilmente il più conosciuto da tutti noi è il numero 9 (SIGKILL) utilizzato per terminare immediatamente i processi, compresi i processi figli.
SIGKILL (9): il segnale SIGKILL viene utilizzato per uccidere o terminare immediatamente i processi. I segnali SIGKILL non possono essere gestiti, ignorati o fermati.
SIGSTOP (19): questo segnale serve per interrompere o mettere in pausa i processi che possono essere successivamente ripresi.
-
SIGCONT (18): il segnale SIGCONT viene utilizzato per riprendere i processi interrotti o in pausa.
Come utilizzare i segnali di uccisione:
La sintassi corretta per inviare segnali è:
O
Puoi sostituire ir con i nomi o i numeri ottenuti in precedenza durante l'esecuzione del comando kill -l. Il PID è l'ID del processo che puoi apprendere utilizzando il comando ps come mostrato nelle seguenti istruzioni.
Per iniziare la sezione pratica di questo tutorial, proviamo SIGSTOP e SIGCONT per mettere in pausa un processo e poi riprenderlo. Per il primo esempio, ho creato un piccolo nome in codice linux-consolesignal che stampa continuamente "linux-console.net " come mostrato nello screenshot qui sotto.
Per inviare un segnale al processo, prima devo apprendere il suo PID. Per visualizzare l'ID processo (PID) è necessario eseguire il comando ps. Nel mio caso, sono io quello che ha eseguito il processo, quindi utilizzo il comando ps seguito dal flag -u per mostrare solo i miei processi.
Nota: per ulteriori istruzioni sul comando ps, leggi Utilizzo del comando ps in Linux.
Come puoi vedere, il PID dello script linux-consolesignal in esecuzione è 16182.
La schermata seguente mostra due terminali; il terminale di destra mostra la consegna del segnale SIGSTOP al processo 16182. Il terminale di sinistra mostra come il processo viene interrotto quando invio il segnale.
Come puoi vedere sul terminale destro, il processo è stato interrotto correttamente.
È necessario inviare il segnale SIGCONT per riprendere l'esecuzione del processo, come mostrato negli screenshot seguenti.
Come puoi vedere, il processo è ripreso.
È possibile ottenere lo stesso risultato sostituendo i nomi dei segnali con i relativi numeri. L'esempio seguente ripete lo scenario precedente, ma questa volta definisce i segnali in base al loro numero.
L'esempio seguente mostra anche come il SIGKILL viene consegnato al processo 17721 per metterlo in pausa. Questa volta invece di specificare il nome del segnale, specifico il numero del segnale restituito dal comando kill -l, in questo caso 19 per il segnale SIGSTOP.
La schermata seguente mostra come specificare il segnale SIGCONT, anche utilizzando il suo numero al posto del nome.
Come puoi vedere, il risultato è lo stesso quando si utilizza il nome o il numero del segnale.
Come detto in precedenza, il segnale SIGKILL viene utilizzato per terminare completamente un processo; è probabilmente il segnale più utilizzato dagli utenti.
Come puoi vedere nell'esempio seguente, in cui SIGKILL è implementato con il suo numero (9), lo script è stato completamente terminato o ucciso.
Altri segnali importanti:
SIGINT: questo segnale viene inviato quando l'utente richiede l'interruzione del processo (ad esempio, Ctrl+C).
IGTERM: il segnale SIGTERM viene inviato per richiedere la terminazione del processo, ma solo per richiedere e non per terminare. Contrariamente a SIGKILL o SIGSTOP, questo segnale può essere gestito, bloccato o ignorato.
SIGILL: questo segnale viene utilizzato per terminare i processi come causa di un errore come errori di funzionamento o di esecuzione. Questo segnale non può essere ignorato.
SIGCHLD: utilizzato per notificare ai processi principali gli eventi dei processi secondari.
SIGHUP: questo segnale viene attivato quando la connessione viene interrotta bruscamente.
SIGPIPE: questo segnale viene inviato ai processi che tentano di scrivere su una pipe senza fine di lettura o che non può essere letta.
SIGQUIT: questo segnale è simile a SIGINT ma produce un core dump.
Conclusione:
Usare i segnali Linux per uccidere, fermare, mettere in pausa i processi, tra le altre funzioni, è una conoscenza di base che ogni utente Linux deve possedere. Una conoscenza approfondita dei segnali è particolarmente importante per i programmatori che devono garantire che i gestori dei segnali non producano effetti indesiderati sul sistema. Come puoi vedere, ci sono decine di segnali disponibili; questo tutorial si è concentrato solo su quelli più comuni. Puoi ottenere maggiori informazioni sui segnali Linux su https://www.gnu.org/software/libc/manual/html_node/Standard-Signals.html.
Grazie per aver letto il suggerimento di Linux; continua a seguirci per ulteriori suggerimenti ed esercitazioni su Linux.