Abbiamo già discusso del comando kill che puoi utilizzare nel caso in cui desideri terminare i processi in Linux. Tuttavia, esiste un'altra utilità della riga di comando che puoi utilizzare per lo stesso scopo:killall . In questo tutorial, discuteremo le basi di questo comando usando alcuni esempi di facile comprensione.
Ma prima di farlo, vale la pena ricordare che tutti gli esempi inclusi in questo tutorial sono stati testati su Ubuntu 18.04 LTS.
Comando Linux killall
Il comando killall ti consente di uccidere i processi per nome. Di seguito è riportata la sintassi dello strumento:
killall [OPTIONS] name
Ed ecco come la pagina man spiega lo strumento:
killall sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent. Signals can be specified either by name (e.g. -HUP or -SIGHUP) or by number (e.g. -1) or by option -s.
If the command name is not regular expression (option -r) and contains a slash (/), processes executing that particular file will be selected for killing, independent of their name.
killall returns a zero return code if at least one process has been killed for each listed command, or no commands were listed and at least one process matched the -u and -Z search criteria. killall returns non-zero otherwise.
A killall process never kills itself (but may kill other killall processes).
I seguenti esempi in stile domande e risposte dovrebbero darti un'idea migliore di come funziona il comando killall.
Q1. Come usare il comando killall?
L'utilizzo di base dello strumento è molto semplice:tutto ciò che devi fare è passare il nome del processo come argomento a killall. Ad esempio, per uccidere il gthumb processo in esecuzione sul mio sistema, ho usato killall nel modo seguente:
killall gthumb
Tieni presente che nel caso non fossi a conoscenza del nome esatto del processo, puoi utilizzare il ps comando per recuperare queste informazioni.
Q2. Killall fa distinzione tra maiuscole e minuscole?
Sì. Genera un errore "nessun processo trovato" se l'utente non riesce a scrivere il nome del processo nel caso corretto. Segue un esempio:
Tuttavia, se vuoi, puoi forzare killall a ignorare le maiuscole usando il -I opzione della riga di comando.
Q3. Come fare in modo che killall chieda prima di terminare il processo?
Supponiamo che tu voglia che il comando killall chieda i permessi dell'utente prima di terminare un processo, quindi puoi usare -i opzione della riga di comando. Questo renderà interattiva l'operazione killall.
Ad esempio:
Q4. Come scegliere il segnale che killall invia da elaborare?
Per impostazione predefinita, è il segnale SIGTERM che killall invia ai processi. Tuttavia, puoi inviare anche altri segnali. Puoi utilizzare le opzioni -s , --segnale e -SEGNALE per inviare questi altri segnali.
Tuttavia, affinché funzioni, è necessario sapere quali segnali può inviare il comando killall. Puoi farlo usando -l opzione della riga di comando.
killall -l
Di seguito è riportato l'elenco del suddetto comando prodotto sul nostro sistema:
Q5. Come evitare che killall si lamenti se il processo specificato non esiste?
Se il processo il cui nome è passato a "killall" non è in esecuzione (non esiste), lo strumento lo trasmette all'utente in output.
Tuttavia, se non vuoi che lo strumento produca tale output, puoi usare -q opzione della riga di comando.
Quindi puoi vedere che il comando killall è rimasto silenzioso quando è stato utilizzato -q.
Q6. Come uccidere tutti i processi di proprietà di un utente?
Se il requisito è di terminare tutti i processi di proprietà di un utente specifico, puoi utilizzare -u opzione fornita da killall. Inutile dire che l'opzione richiede di specificare il nome utente per l'utente come input.
killall -u [user-name]
Ad esempio:
killall -u himanshu
Q7. Come uccidere i processi in base al tempo?
Supponiamo di voler terminare tutti i processi che sono in esecuzione da più di 5 ore, quindi puoi farlo usando il -o opzione nel modo seguente:
killall -o 5h
Naturalmente, puoi specificare i nomi dei processi se non vuoi terminare tutti i processi. Allo stesso modo, se vuoi terminare processi che hanno, diciamo, meno di 4 ore, puoi farlo usando il -y opzione della riga di comando.
killall -y 4h
Ecco come la pagina man spiega queste opzioni:
-o, --older-than
Match only processes that are older (started before) the time
specified. The time is specified as a float then a unit. The
units are s,m,h,d,w,M,y for seconds, minutes, hours, days,
weeks, Months and years respectively.
-y, --younger-than
Match only processes that are younger (started after) the time
specified. The time is specified as a float then a unit. The
units are s,m,h,d,w,M,y for seconds, minutes, hours, days,
weeks, Months and years respectively.
Q8. Come assicurarsi che killall ritorni solo dopo la morte dei processi?
Dopo che il segnale è stato consegnato da killall al processo, se vuoi assicurarti che il comando torni solo dopo che il processo è terminato, puoi farlo usando il -w opzione della riga di comando, che costringe killall ad attendere.
killall -w [process-name]
Ecco come la pagina man descrive questa opzione:
-w, --wait
Wait for all killed processes to die. killall checks once per
second if any of the killed processes still exist and only
returns if none are left. Note that killall may wait forever if
the signal was ignored, had no effect, or if the process stays
in zombie state.
Conclusione
Killall potrebbe non essere una passeggiata per i neofiti, ma non è anche molto complesso. Devi esercitarti con le opzioni della riga di comando che offre. Ne abbiamo discusso la maggior parte, quindi questo tutorial dovrebbe essere un buon punto di partenza. Una volta che hai finito con questi, puoi leggere di più sul comando andando alla sua pagina man.