Comando kill in Linux: inviare segnali a un PID e verificare l’esito
kill invia un segnale a un identificatore di processo (PID) o a un job della shell. Il segnale predefinito è SIGTERM, una richiesta di terminazione che permette al programma di gestire l’arresto.
In Bash, kill è un comando incorporato nella shell. La reazione dipende dal segnale e dal programma: quando devi arrestare un’attività, usa prima la sua procedura normale o una richiesta SIGTERM, verificando poi il risultato.
Sintassi di base
kill [-segnale] PID...
In Bash consulta help kill. La shell può fornire una versione diversa dall’eseguibile esterno; type kill aiuta a identificare quella usata. Sono disponibili anche forme come kill -s TERM PID, ma opzioni e nomi accettati vanno verificati nella documentazione locale.
Esempi pratici
Controllare il PID
Sostituisci 1234 con il PID di un tuo processo di prova. Controlla utente, stato e riga di comando, verificando che sia ancora l’attività che vuoi arrestare.
ps -p 1234 -o pid,user,stat,cmd
Richiedere la terminazione
Dopo il controllo, invia esplicitamente SIGTERM al PID corretto. L’esempio non deve essere eseguito sul numero illustrativo 1234 senza averlo sostituito e verificato.
kill -TERM 1234
Elencare i segnali
Mostra i nomi riconosciuti dalla shell corrente senza inviare segnali. Preferire nomi come TERM evita di presumere che ogni numero sia uguale su tutte le piattaforme.
kill -l
Inviare un segnale e controllare il risultato
kill usa un PID; non cerca automaticamente il nome del programma. Il numero 12345 qui sotto è illustrativo: sostituiscilo in tutte le righe con il PID di un tuo processo di prova appena verificato con ps.
ps -p 12345 -o pid,stat,comm
kill -TERM 12345
ps -p 12345 -o pid,stat,comm
La prima ricerca mostra il bersaglio. Se l’invio riesce, kill normalmente non stampa nulla; quando il processo è terminato e non è più presente, l’ultima ricerca mostra soltanto l’intestazione o nessuna riga relativa al PID. Il tempo necessario dipende dall’applicazione.
La sequenza illustra il flusso, ma non blocca automaticamente le righe successive in caso di errore. Per controllare l’esito dell’invio, leggi subito $? dopo kill, prima di eseguire il secondo ps. In Bash, 0 indica il successo del comando; un valore diverso indica un errore. Non equivale alla conferma che la pulizia e l’uscita del processo siano già concluse. Con più destinatari, non leggere il successo come conferma dell’arresto di tutti.
SIGTERM offre al programma la possibilità di reagire e pulire le risorse, ma può essere gestito, ignorato o bloccato. SIGKILL non consente una pulizia gestita dall’applicazione. Inoltre i PID possono essere riutilizzati: anche una verifica recente riduce il rischio, senza congelare l’identità del bersaglio.
La verifica disponibile è stata eseguita su Windows con Git Bash 5.3.9: tre nuovi processi figli sleep 30, creati appositamente, hanno ricevuto rispettivamente SIGTERM esplicito, il segnale predefinito e SIGTERM tramite il job %1. In ciascun caso kill -0 riusciva prima e falliva dopo la terminazione e la raccolta con wait. Questo conferma il comportamento osservato in quell’ambiente; le colonne Linux di ps -o non sono state riprodotte.
Segnali e opzioni principali
| Forma | Significato |
|---|---|
-TERM |
Richiede la terminazione tramite SIGTERM. |
-INT |
Invia SIGINT, il segnale di interruzione; il programma può gestirlo. |
-HUP |
Invia il segnale hangup; il suo effetto dipende dal programma. |
-KILL |
Invia SIGKILL, non intercettabile, ignorabile o bloccabile; impedisce la pulizia dell’applicazione. |
-0 |
Non invia alcun segnale: verifica esistenza e permessi di invio. |
SIGINT è il segnale normalmente associato a Ctrl+C, ma kill -INT PID indirizza il bersaglio indicato, mentre il terminale può inviare l’interruzione al gruppo in primo piano. Non presumere che HUP significhi sempre “ricarica”: verifica la documentazione del programma. Il manuale signal(7) descrive azioni predefinite e gestione dei segnali.
Precauzioni su PID, permessi e arresto
Per un singolo processo usa un PID positivo verificato. Su Linux, 0 e valori negativi hanno significati relativi a gruppi o insiemi di processi: non sono segnaposto da copiare. I job Bash, come %1, sono riferimenti della shell corrente e possono comprendere più processi di una pipeline.
kill -0 fallisce anche quando mancano i permessi, non soltanto quando il PID non esiste. Il successo non dimostra che un servizio risponda correttamente o che stia ancora svolgendo lavoro utile: anche uno zombie, un processo già terminato ma non ancora raccolto dal padre, può risultare presente. Le regole Linux di kill(2) distinguono i controlli di esistenza e autorizzazione.
Usa SIGKILL come ultima risorsa prevista dalla procedura operativa: può interrompere scritture e pulizia. Non garantisce che la riga del processo sparisca immediatamente dalla vista; per esempio, un processo zombie deve essere raccolto dal padre. Per un servizio gestito usa la procedura del relativo gestore e controlla i log prima di ripetere segnali.
Domande frequenti
Perché il processo è ancora visibile dopo kill?
Può stare completando la pulizia, ignorare o bloccare SIGTERM, oppure essere già terminato ma ancora presente come zombie. Verifica stato, log e correttezza del PID. Controlla anche se il comando ha segnalato un errore e se esiste una procedura normale di arresto del servizio.
Documentazione di riferimento
Consulta la sezione kill del manuale Bash per la versione incorporata e usa help kill per le opzioni effettivamente disponibili nella shell.




