CodeGym /Corsi /Docker SELF /Terminazione dei processi: comandi `kill`, `killall`, `pk...

Terminazione dei processi: comandi `kill`, `killall`, `pkill`

Docker SELF
Livello 2 , Lezione 5
Disponibile

Terminazione dei processi: comandi kill, killall, pkill

1. Chiusura dei processi

Oggi facciamo un passo avanti e impariamo i comandi che permettono di chiudere i processi in modo efficace. Preparati, perché la pazienza verso i programmi "bloccati" sta per finire!

Ogni applicazione o comando avviato in Linux è un processo. Ma cosa fare se un programma si blocca, usa il 100% delle risorse del processore o semplicemente smette di funzionare correttamente? Il compito dell'amministratore (o dello sviluppatore) è intervenire e chiudere il processo "ribelle". In Linux, per questo scopo, abbiamo a disposizione un intero arsenale di strumenti: kill, killall e pkill. Non preoccuparti, nonostante i nomi minacciosi, non siamo qui per rompere tutto. Piuttosto, è un modo elegante per mettere ordine.


2. Comando kill

Fondamenti

Il comando kill termina un processo utilizzando il suo identificatore (PID). PID è un numero unico che il sistema assegna a ogni processo. Per esempio, se vuoi terminare un processo con PID 1234, usa il seguente comando:

kill 1234

Linux per sua natura è piuttosto democratico, quindi il comando kill non dà un ordine al processo di "morire", ma invia una richiesta di terminazione. Questa richiesta è chiamata "segnale". Di default, kill invia il segnale SIGTERM (15).

Che cos’è un segnale?

Linux utilizza segnali per comunicare con i processi. È come inviare cartoline postali con diverse intenzioni:

  • SIGTERM (15): "Per favore, termina". È una richiesta cortese al processo di concludere la sua esecuzione.
  • SIGKILL (9): "Ora basta, sei licenziato!" Terminazione forzata del processo.
  • SIGHUP (1): "Ehi, ricarica la configurazione". Utilizzato per riavviare alcuni processi senza fermarli.

Esempio di terminazione forzata di un processo:

kill -9 1234

Se un processo si rifiuta di terminare con SIGTERM, puoi inviargli un segnale più forte — SIGKILL.

Come scoprire il PID di un processo?

Per utilizzare il comando kill, devi conoscere il PID del processo. Qui vengono in aiuto comandi già noti come ps, top o htop. Per esempio, l’output del comando ps aux mostrerà tutti i processi in esecuzione:

ps aux | grep firefox

Questo comando troverà il processo Firefox e ne mostrerà il PID.

Processo terminato, puoi tirare un respiro di sollievo. Ma cosa fare se ci sono più processi "bloccati"? Qui entrano in gioco i comandi killall e pkill.


3. Comando killall

Comodità per chiudere molti processi contemporaneamente

Il comando killall permette di terminare tutti i processi con un nome specifico. Non devi cercare il PID manualmente, tutto diventa molto più semplice. Per esempio, se vuoi chiudere tutte le istanze di Firefox in esecuzione:

killall firefox

Come il comando kill, anche killall invia segnali ai processi. Puoi specificare un segnale preciso:

killall -9 firefox

Consiglio Utile

Fai attenzione con comandi come killall. Se indichi accidentalmente un processo troppo generico, ad esempio, killall python, potresti terminare contemporaneamente tutte le applicazioni Python in esecuzione, inclusi script importanti o attività di server.

Quali segnali sono supportati?

Per tutti i comandi kill, killall e pkill è possibile visualizzare l'elenco dei segnali disponibili usando il comando:

kill -l

4. Comando pkill

Cerchiamo i processi per nome (o parte di esso)

Il comando pkill funziona in modo simile a killall, ma è più flessibile. Ti consente di terminare processi che corrispondono a un determinato pattern. Per esempio:

pkill fire

Il comando terminerà tutti i processi che contengono la parola "fire" nel nome. È utile quando il nome del processo è lungo o ne conosci solo una parte.

Terminare i processi di utenti specifici

Puoi terminare i processi appartenenti a utenti specifici. Per esempio:

pkill -u username

Questo comando terminerà tutti i processi appartenenti all'utente username.

Confronto tra kill, killall e pkill

Comando Caratteristiche
kill Termina un processo tramite il suo PID. Funziona in modo mirato.
killall Termina tutti i processi con il nome specificato. Pratico per chiusure di massa.
pkill Termina processi in base al nome o al pattern. Supporta parametri aggiuntivi, come il nome utente.

5. Pratica: terminiamo i processi

Proviamo tutto ciò che abbiamo studiato in pratica. Per cominciare, avviamo alcuni processi di lunga durata:

sleep 300 &
sleep 400 &
sleep 500 &

Questi comandi creeranno tre processi in background con tempi di attesa diversi. Ora puoi lavorare con i comandi kill, killall e pkill.

  1. Visualizza tutti i processi sleep in esecuzione utilizzando il comando ps:
ps aux | grep sleep

Vedrai il PID di ciascun processo.

  1. Termina il processo con PID, ad esempio, 1234:
kill 1234
  1. Termina tutti i processi sleep contemporaneamente:
killall sleep
  1. Avvia altri processi sleep e terminane alcuni utilizzando pkill:
pkill sl

6. Errori comuni e dettagli importanti

Se provi a terminare un processo per il quale non hai i permessi (ad esempio il processo di un altro utente), il comando restituirà un errore. Per farlo, devi avere i privilegi da superutente (sudo). Ad esempio:

sudo kill 1234

Un'altra fonte di confusione potrebbe essere l'uso di segnali troppo aggressivi come -9. Questo è l'equivalente di staccare la spina del computer: il sistema non avrà il tempo di liberare le risorse o salvare i dati. Usa SIGKILL solo come ultima risorsa.

Fai attenzione con killall e pkill, specialmente se stai gestendo un server. Terminare i processi "alla cieca" può portare alla perdita di dati importanti.


Perché è importante conoscere i comandi per terminare i processi?

Questi comandi hanno un'ampia gamma di applicazioni, dalle chiusure di applicazioni bloccate alla gestione dei processi server. Nei colloqui di lavoro, la conoscenza di kill e pkill può essere un indicatore importante della tua competenza, specialmente se si tratta di amministrazione di sistemi o lavorare con il backend.

Usa queste conoscenze per creare script che terminano automaticamente processi incontrollati o liberano le porte occupate. Ad esempio, prima di avviare un server che occupa la porta 8080, puoi usare:

pkill -f "port 8080"

La flessibilità e la potenza di questi comandi li rendono strumenti indispensabili per qualsiasi specialista Linux.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION