Comando killall: terminare i processi per nome, il segnale -9 e installare psmisc

Ambiente di testFamiglia RHELAlmaLinux 9.8psmisc 23.4account rootDebian 12 · psmisc 23.6 Account normale (esegue killall)
Comandi per processi · pianificazionekillallPosizione/usr/bin/killallVerificato il 2026-11-03

Il comando killall è un comando Linux che sceglie i processi in esecuzione in base al nome del programma invece che al numero di processo (PID) e invia loro un segnale; se non indichi un segnale, invia SIGTERM (secondo il manuale ufficiale). Poiché termina in una volta tutti i processi con lo stesso nome, su un server AlmaLinux 9 abbiamo prima controllato con pgrep e ps quattro processi avviati da copie di sleep con altri nomi; per un eseguibile con un nome di oltre 15 caratteri, nel nome del processo restavano solo i primi 15 caratteri.

Abbiamo eseguito killall solo su processi xxsleep avviati per il test con un account normale su un server Debian 12. I riquadri dei risultati mostrano l'output di rpm, pgrep, ps, pidof, cat e kill eseguiti con l'account root su un server AlmaLinux 9.8, e l'output di killall eseguito sul server Debian 12. I numeri di processo (PID), i nomi dei processi, i percorsi degli eseguibili e i nomi degli account sono stati sostituiti con valori di esempio.

1️⃣ Installare il comando killall

  • ↪️ Il pacchetto psmisc e il controllo della versione

killall fa parte del pacchetto psmisc. Su un server AlmaLinux 9.8, controllando con rpm a quale pacchetto appartiene /usr/bin/killall, è comparsa la versione psmisc 23.4.

rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killall
psmisc 23.4

L'elenco dei file dello stesso pacchetto, visto con rpm -ql, comprendeva anche pstree e fuser.

Se compare [command not found], cioè che il comando non viene trovato, installa il pacchetto psmisc. Nella famiglia RHEL è [dnf install psmisc], nella famiglia Debian [apt install psmisc]. Sul server Debian 12 psmisc 23.6 era già installato, e killall si trovava in /usr/bin/killall.

Controllando sul server AlmaLinux 9.8, pkill, dal nome simile, era nel pacchetto procps-ng, e kill era un comando integrato della shell.

2️⃣ Come usare il comando killall

  • ↪️ Controllare i bersagli per nome del processo

La forma di base è [killall nome del processo]. Trova tutti i processi in esecuzione con il nome indicato e invia loro un segnale; se scrivi più nomi, fa la stessa cosa per ciascun nome (secondo il manuale ufficiale).

Poiché i processi con lo stesso nome terminano tutti insieme, controlla prima con pgrep cosa è in esecuzione con quel nome. Abbiamo copiato sleep in una cartella di lavoro con i nomi xxsleep-a1, xxsleep-a2 e xxsleep-longname-x1, avviato xxsleep-a1 due volte, per quattro processi in tutto, e poi mostrato numeri e nomi con -l.

pgrep -l xxsleep
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam

Nella quarta riga l'eseguibile si chiama xxsleep-longname-x1, ma il nome del processo era troncato a xxsleep-longnam.

Con -a compare l'intera riga di comando eseguita. I due xxsleep-a1 con lo stesso nome sono stati distinti dall'argomento finale in secondi, 300 e 310.

pgrep -a xxsleep
2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330

Per trovare solo i processi il cui nome corrisponde esattamente, aggiungi -x. Il risultato per xxsleep-a1 è stato di due numeri.

pgrep -x xxsleep-a1
2141
2142

Per controllare solo i numeri inserendo un nome così com'è, usa pidof. Cercando xxsleep-a1, i due numeri sono comparsi su una riga.

pidof xxsleep-a1
2142 2141

ps mostra solo i processi il cui nome corrisponde esattamente se dopo -C scrivi più nomi separati da virgole.

ps -o pid,comm -C xxsleep-a1,xxsleep-a2
    PID COMMAND
   2141 xxsleep-a1
   2142 xxsleep-a1
   2150 xxsleep-a2

Sul server Debian 12 abbiamo avviato quattro processi con gli stessi nomi ed eseguito [killall xxsleep-a1]: non ha mostrato nulla ed è terminato con codice di uscita 0. Cercando di nuovo con pgrep, i due xxsleep-a1 erano spariti e restavano solo xxsleep-a2 e xxsleep-longname-x1. Se al posto di un nome scrivi un percorso con una barra (/), sceglie i processi che eseguono quel file, qualunque sia il loro nome (secondo il manuale ufficiale).

Con il nome inesistente xxsleep-zz è comparsa una riga con [no process found] dopo il nome, ed è terminato con codice di uscita 1. Il codice di uscita è 0 solo quando per ogni nome indicato è stato terminato almeno un processo (secondo il manuale ufficiale).

killall xxsleep-zz
xxsleep-zz: no process found

Per terminare un solo processo di cui conosci il numero, invia il segnale solo a quel numero con kill: Comando kill di Linux.

3️⃣ Opzioni del comando killall

  • ↪️ -e e nomi di 15 caratteri, -i, -v, -u, -r

Leggendo da /proc/PID/comm il nome del processo avviato come xxsleep-longname-x1, restavano solo i primi 15 caratteri: xxsleep-longnam.

cat /proc/2155/comm
xxsleep-longnam

Abbiamo eseguito pgrep con xxsleep-longname, di 16 caratteri.

pgrep -a xxsleep-longname

È terminato senza output con codice di uscita 1, e cercando di nuovo con xxsleep-longnam, di 15 caratteri, è comparso quel processo.

pgrep -l xxsleep-longnam
2155 xxsleep-longnam

Quando killall riceve un nome di oltre 15 caratteri e ci sono processi di cui non riesce a leggere il nome completo, prende di mira tutti quelli i cui primi 15 caratteri corrispondono; con -e salta queste voci (secondo il manuale ufficiale). Sul server Debian 12, scrivendo i primi 15 caratteri xxsleep-longnam con -e e -v, sono comparse righe che indicavano che altri tre processi con il nome troncato a 15 caratteri erano stati saltati, ed è terminato con [no process found].

killall -e -v xxsleep-longnam
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process found

Con il nome completo xxsleep-longname-x1, dopo le stesse righe di salto è comparsa una riga con il segnale inviato a quel processo.

killall -e -v xxsleep-longname-x1
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15

Con -v, per ogni processo che ha ricevuto un segnale è comparsa una riga con nome, numero e numero del segnale.

killall -v xxsleep-a2
Killed xxsleep-a2(2150) with signal 15

-i chiede per ogni processo se terminarlo. Abbiamo riavviato due xxsleep-a1 e passato y e n in ordine tramite lo standard input: le due domande sono comparse di seguito su una riga, e solo il primo xxsleep-a1 è terminato, mentre il secondo è rimasto.

printf 'y\nn\n' | killall -i xxsleep-a1
Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)

-u sceglie solo i processi che appartengono a quell'account, e se ometti il nome, il bersaglio sono tutti i processi di quell'account. Scrivendo anche xxsleep-a1 dopo il nome dell'account, il segnale è stato inviato solo all'xxsleep-a1 rimasto.

killall -v -u user xxsleep-a1
Killed xxsleep-a1(2172) with signal 15

-o e -y scelgono in base all'ora di avvio, e il tempo si scrive con un numero seguito da un'unità s, m, h, d, w, M o y, come in [-o 30m].

-r legge i nomi come espressioni regolari estese. Passando il modello ^xxsleep-a a pgrep, sono comparsi tre processi che iniziano con xxsleep-a.

pgrep -l '^xxsleep-a'
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2

-w attende, controllando ogni secondo, finché tutti i processi che hanno ricevuto il segnale non spariscono. Se un processo ignora il segnale o resta come zombie, l'attesa può non finire mai.

La prima tabella qui sotto raccoglie i comandi di controllo e le opzioni di killall eseguiti davvero in questo articolo; le opzioni di killall non eseguite sono nella seconda tabella, secondo il manuale ufficiale.

📌 Controllare i processi e killall: risultati di questo articolo

ComandoCompitoRisultato in questo articolo
pgrep -l nomeNumero e nome dei processi il cui nome lo contieneQuattro righe con xxsleep; il nome lungo si vede solo fino ai primi 15 caratteri, xxsleep-longnam
pgrep -a nomeNumero e intera riga di comandoI due xxsleep-a1 con lo stesso nome distinti dagli argomenti finali 300 e 310
pgrep -x nomeSolo i numeri dei processi il cui nome corrisponde esattamenteCon xxsleep-a1 due righe: 2141 e 2142
pidof nomeI numeri in esecuzione con quel nome, su una rigaCon xxsleep-a1 2142 2141
ps -o pid,comm -C nomeNumero e nome dei processi il cui nome corrisponde esattamente; più nomi separati da virgoleDue righe di xxsleep-a1 e una di xxsleep-a2
cat /proc/PID/commNome del processo (fino ai primi 15 caratteri)2155 è xxsleep-longnam
killall nomeSIGTERM ai processi con quel nomeI due xxsleep-a1 terminati con codice di uscita 0; il nome inesistente xxsleep-zz ha dato no process found e codice di uscita 1
killall -e nomeNomi di oltre 15 caratteri solo se il nome completo corrispondexxsleep-longnam ha dato no process found, xxsleep-longname-x1 terminato
killall -v nomeMostra il risultato per ogni processo che riceve il segnaleKilled xxsleep-a2(2150) with signal 15
killall -i nomeChiede conferma per ogni processo prima di terminarloInserendo y e n, è terminato solo il primo xxsleep-a1
killall -u nome accountSolo i processi che appartengono a quell'accountScritto insieme a un nome, è terminato solo l'xxsleep-a1 di quell'account
killall -9 nomeSIGKILL invece di SIGTERMKilled xxsleep-a2(2173) with signal 9

📎 Altre opzioni: secondo il manuale ufficiale

OpzioneCompito
-I, --ignore-caseConfronta i nomi senza distinguere maiuscole e minuscole
-g, --process-groupSegnale al gruppo di processi invece che al processo (una volta per gruppo)
-l, --listElenco dei nomi di segnale conosciuti
-n, --ns PIDSolo i processi nello stesso namespace PID di quel PID; per impostazione predefinita, tutti i namespace
-o, --older-than tempoSolo i processi avviati prima di quel tempo (unità s, m, h, d, w, M, y)
-q, --quietNon avvisa anche se nessun processo è stato terminato
-r, --regexpLegge i nomi come espressioni regolari estese
-s, --signal segnaleSegnale da inviare al posto di SIGTERM
-V, --versionMostra le informazioni sulla versione
-w, --waitAttende finché tutti i processi che hanno ricevuto il segnale non spariscono
-y, --younger-than tempoSolo i processi avviati dopo quel tempo
-Z, --context modelloSolo i processi il cui contesto di sicurezza corrisponde al modello di espressione regolare estesa; va scritto prima degli altri argomenti; il nome si può omettere

🔲 Simulatore del comando killall

Il simulatore qui sotto parte da un elenco dei quattro processi xxsleep più l'xxsleep-a2 dell'account di esempio user1. Tocca i chip per confrontare quali righe spariscono dall'elenco con [killall -v], [-i] e [-u]; i testi di output di killall imitano l'output ottenuto sul server Debian 12.

Simulatore del comando killallpsmisc 23.4
[root@server work]#
Funziona solo nel tuo browser. L'elenco a sinistra usa valori di esempio, e killall è un'imitazione che segue i testi di output ottenuti sul server Debian 12 e cancella righe solo dall'elenco.

4️⃣ Segnali di killall

  • ↪️ L'opzione -s, killall -9 e i numeri di segnale

Il segnale da inviare si scrive per nome, come [-HUP] o [-SIGHUP], per numero, come [-1], oppure dopo l'opzione -s (secondo il manuale ufficiale). [killall -9 nome del processo] invia il segnale 9, SIGKILL. SIGKILL è un segnale che il processo non può intercettare né ignorare (secondo il manuale ufficiale), quindi il processo termina senza poter fare pulizia. Per questo lo si invia quando il segnale predefinito, SIGTERM, non termina il processo.

Sul server Debian 12, aggiungendo -9 insieme a -v all'xxsleep-a2 riavviato, è comparsa una riga con il numero di segnale 9.

killall -9 -v xxsleep-a2
Killed xxsleep-a2(2173) with signal 9

Abbiamo controllato nomi e numeri dei segnali con [kill -l]. Anche killall ha un'opzione -l che mostra i nomi di segnale che conosce.

kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

Inserendo un solo numero è comparso solo il nome di quel segnale. Il 15 che killall invia per impostazione predefinita era TERM, e il 9 inviato con -9 era KILL.

kill -l 15
TERM
kill -l 9
KILL

Se scrivi un nome di segnale che non è nell'elenco, compare un messaggio nella forma [FOO: unknown signal; killall -l lists signals.] (secondo il manuale ufficiale e i testi del programma).

🔢 FAQ & contenuti consigliati

killall è un comando del pacchetto psmisc, pkill del pacchetto procps-ng, lo stesso di pgrep. pkill cerca una parte del nome come espressione regolare estesa, come pgrep, mentre killall legge i nomi come espressioni regolari solo quando aggiungi -r (secondo il manuale ufficiale).

Il manuale ufficiale di psmisc scrive che sui sistemi diversi da Linux [killall nome] può comportarsi diversamente dal previsto e che bisogna fare particolare attenzione quando lo si esegue con l'account amministratore. Sugli altri sistemi, controlla prima il manuale di quel sistema.

C'è un limite al numero di nomi che puoi scrivere in una volta: la dimensione di un intero unsigned long moltiplicata per 8. Di solito sono 64 sui sistemi a 64 bit e 32 sui sistemi a 32 bit (secondo il manuale ufficiale).

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 2   +   1   =