Comando killall in Linux: inviare segnali ai processi con lo stesso nome

Su Linux, killall invia un segnale ai processi che corrispondono ai nomi indicati. Il segnale predefinito è SIGTERM; se esistono più istanze con lo stesso nome, possono essere coinvolte tutte.

La guida si riferisce all’implementazione psmisc, comune su Linux. Il comando omonimo può comportarsi diversamente su altri sistemi Unix: controlla sempre man killall prima di trasferire questi esempi. Esamina prima i candidati con pgrep e verifica l’identità delle attività.

Sintassi di base

killall [opzioni] nome...

Verifica implementazione e opzioni disponibili nel manuale locale. In psmisc la ricerca per nome non è una regex per impostazione predefinita: -r attiva le espressioni regolari. Non interpretare quindi i modelli esattamente come quelli di pgrep.

Esempi pratici

Controllare i processi omonimi

Gli esempi presuppongono un tuo processo di prova chiamato davvero myworker. Visualizza PID e righe di comando e verifica che ogni risultato appartenga all’attività che vuoi arrestare.

pgrep -a -x myworker

Richiedere la terminazione

Con psmisc su Linux, questo comando invia SIGTERM alle istanze del nome indicato. Sostituisci il segnaposto soltanto con il nome del tuo processo di prova già verificato.

killall -TERM myworker

Limitare nome e utente

Sostituisci alice con l’utente proprietario del tuo processo. Il filtro restringe i bersagli, senza concedere permessi aggiuntivi. Controlla anche l’utente delle righe candidate prima dell’azione.

killall -u alice myworker

Il controllo con pgrep è utile, ma non è una simulazione esatta di un altro programma: implementazione e limiti del nome possono differire. I processi possono inoltre cambiare fra la ricerca e l’invio.

Quando più processi hanno lo stesso nome

killall può inviare il segnale a tutte le istanze corrispondenti. Nella sequenza seguente demo-worker deve essere il nome di processi di prova sotto il tuo controllo; i comandi non li creano e non selezionano automaticamente una sola istanza.

pgrep -a -x demo-worker
killall -TERM demo-worker

La prima riga mostra i PID e le righe di comando candidati; controllali prima di eseguire la seconda. L’invio riuscito normalmente non produce un elenco. Dopo il tempo di arresto previsto dall’applicazione, ripeti pgrep -a -x demo-worker per verificare le eventuali istanze rimaste.

La sequenza illustra due operazioni, senza un controllo automatico degli errori. Leggi subito $? dopo killall se devi verificarne l’esito: il successo dell’invio non conferma che tutte le attività abbiano già completato la terminazione. Controlla anche eventuali messaggi di errore.

Per un servizio gestito da systemd, la normale procedura può essere systemctl stop nome-servizio, sostituendo il nome con l’unità effettiva e usando i permessi richiesti. Su altri sistemi usa il gestore previsto. La terminazione diretta può essere seguita da un riavvio automatico del servizio.

Nell’ambiente Windows con Git Bash disponibile per questa verifica, killall non è installato. I quattro esempi sono stati controllati soltanto per la sintassi Bash; non sono stati inviati segnali né provata la selezione di psmisc su Linux.

Opzioni principali

Opzione Funzione in psmisc
-s segnale Specifica il segnale da inviare al posto di SIGTERM.
-u utente Limita i bersagli ai processi dell’utente indicato.
-i Chiede conferma prima di inviare il segnale ai bersagli.
-v Riporta informazioni sull’esito dell’invio; non è una simulazione.
-w Attende la scomparsa dei processi segnalati; può non terminare.

Per nomi oltre 15 caratteri, il manuale descrive casi in cui il nome completo non è disponibile e viene confrontata soltanto la parte iniziale. -e salta le voci lunghe che non possono essere confrontate integralmente; non confonderlo con -e di altri comandi. Usa il manuale della versione installata per valutare questi limiti.

Precauzioni e limiti dell’attesa

Sui server condivisi, più utenti o più istanze possono usare lo stesso nome. Verifica nome, utente e comando prima dell’invio e non aumentare i privilegi soltanto per aggirare un errore di selezione o autorizzazione. SIGTERM richiede l’arresto: la reazione e la durata dipendono dal programma.

-w controlla periodicamente se i processi esistono ancora. Può attendere indefinitamente se il segnale è ignorato, non produce l’effetto atteso o il processo rimane zombie, cioè terminato ma non ancora raccolto dal padre. Non è un’opzione che forza la terminazione.

Il manuale segnala inoltre che un PID può essere riutilizzato fra due controlli di -w. Un’attesa lunga non dimostra quindi, da sola, che l’applicazione stia ancora lavorando. Consulta stato e log, e segui la procedura del servizio prima di ripetere segnali.

Domande frequenti

killall termina tutti i processi del sistema?

Nell’implementazione Linux psmisc, gli esempi con un nome prendono di mira i processi corrispondenti a quel nome. Più istanze possono essere coinvolte. Su altri sistemi Unix il significato può differire: verifica il manuale locale prima di usare il comando.

Documentazione di riferimento

Per opzioni, criteri sui nomi lunghi e limiti di attesa consulta il manuale killall(1) del progetto psmisc e confrontalo con la versione presente nel sistema.