fb-pixel
SupportHost italian

I comandi Linux per gestire i processi

Vuoi sapere come identificare i processi su Linux gestendoli da terminale? In questa guida ti mostreremo i comandi più utili da usare per monitorare cosa sta succedendo, ma anche per intervenire, ad esempio terminando un processo.

Iniziamo!

Come verificare i processi attivi su Linux

Tutti i programmi e i comandi che vengono eseguiti su Linux rappresentano un processo. Se vogliamo sapere quali sono i processi attivi e quelli in background, possiamo usare dei comandi che ci aiutano a identificarli.

Ci sono, infatti, diversi comandi che ci permettono di controllare quali processi sono attivi al momento. Alcuni ci mostrano la fotografia di un momento, mentre altri ci permettono di vedere la situazione in tempo reale.

Vediamo quali sono.

Comando ps

Il comando ps (process status) ci mostra informazioni sui processi attivi. In particolare ci permette di identificare i vari processi fornendoci informazioni come l’ID del processo (un identificativo univoco che lo distingue dagli altri) e il comando associato al processo stesso.

Con questo comando possiamo anche capire da quanto tempo il processo è in esecuzione.

Inoltre con le opzioni possiamo avere informazioni aggiuntive come l’utilizzo della CPU e della RAM.

Vediamo degli esempi.

Se usiamo il comando ps senza opzioni, avremo un output simile a quello che vedi nell’esempio qui sotto.

ps
Comandi Gestione Processi Output Comando Ps Linux

Vediamo come leggere l’output:

  • PID: indica l’ID di quel processo, ci permette di identificare i diversi processi.
  • TTY: indica il tipo di terminale.
  • TIME: in questa colonna è indicato da quanto tempo il processo è in esecuzione.

È importante notare che i processi che vengono elencati in questo modo solo solo quelli associati all’utente corrente e al terminale corrente.

Per avere maggiori informazioni e soprattutto per vedere tutti i processi attivi sul sistema possiamo usare le opzioni aux, in questo modo:

ps aux
  • a ci permette di mostrare tutti i processi;
  • u ci permette di visualizzarli in un formato esteso che comprende anche l’utilizzo della CPU e della memoria;
  • x, insieme ad a serve a mostrare tutti i processi, anche quelli non associati a un terminale (cioè che saranno mostrati con un campo vuoto nella colonna tty).

Ecco un esempio dell’output di questo comando.

Output Comando Ps Aux

Come leggere l’output:

  • user – l’utente associato a quel processo.
  • PID – l’ID del processo.
  • %CPU – quanta CPU viene usata dal processo.
  • %MEM – quanta RAM viene usata.
  • VSZ – la memoria virtuale usata.
  • RSS – la memoria fisica usata.
  • TTY – il terminale.
  • STAT – lo stato del processo. Può essere ad esempio R (running – in esecuzione), Z (zombie), I (multi-thread) o S (sleeping – in attesa).
  • START – ora e data di inizio del processo;
  • TIME – tempo totale.
  • COMMAND – il comando che ha avviato il processo.

Comando pstree

Il comando pstree è simile al comando ps, ma anziché mostrarci i processi attivi come lista, ce li presenta sotto forma di diagramma ad albero.

Questo comando è utile per capire meglio la dipendenza di un processo da un altro.

pstree
Output Comando Pstree

Comando top

Il comando top è simile al comando ps, ma in questo caso ci mostra le informazioni sui processi in tempo reale.

Per intenderci meglio, il comando ps fa una sorta di fotografia del momento mostrandoci i processi, top invece ci mostra un elenco dinamico che cambia in tempo reale.

top
Output Comando Top

Vediamo come leggere le informazioni dell’output:

  • PID – l’ID del processo;
  • Utente – il nome dell’utente associato a quel processo;
  • PR – priorità del processo;
  • NI – viene definito nice value, più è alto, minore sarà la priorità del processo.
  • VIRT – memoria virtuale;
  • RES – memoria fisica;
  • SHR – memoria condivisa con altri processi;
  • S – stato del processo, ad esempio S per sleeping o dormiente, T per stopped o fermo.
  • %CPU – CPU usata espressa in percentuale.
  • %MEM – RAM usata espressa in percentuale.
  • Time +: tempo (inteso come tempo della CPU) usato;
  • COMANDO: comando associato al processo.

Una volta eseguito il comando top possiamo spostarci all’interno della lista usando le frecce (verso il basso o verso l’alto).

Per visualizzare solo i processi attivi (cioè che stanno usando la CPU), ci basta premere “i” sulla tastiera. Possiamo premerlo nuovamente se vogliamo visualizzare di nuovo tutti i processi.

Se vogliamo interrompere l’esecuzione del comando possiamo premere “q“.

Per visualizzare colonne diverse (ad esempio aggiungere altre colonne o rimuoverne alcune), possiamo fare così:

  • Eseguiamo il comando top.
  • Premiamo f.
  • Vedremo una lista di campi che è possibile mostrare, quelli attivi sono in grassetto e contrassegnati con il simbolo di un asterisco.
  • Con le frecce possiamo spostarci e selezionare i campi, poi con la barra spaziatrice possiamo selezionare o deselezionare i campi.
  • Alla fine premiamo “Esc” per uscire.

In questa gif ti mostro come aggiungere il campo UID. Tieni presente che ogni utente ha un ID univoco ad esso associato, puoi approfondire leggendo la guida sulla gestione di utenti e gruppi.

Modificare Campi Comando Top

Comando htop

Il comando htop è simile a top, ma ci permette di interagire più facilmente con l’elenco dei processi.

In particolare possiamo scorrere nella lista del processi, usando le frecce direzionali, e terminare un processo usando le opzioni elencate in fondo, ad esempio usiamo F9 e poi Invio per terminare un processo.

Possiamo anche usare altre funzioni come la ricerca, attivabile con F3, che ci permette di cercare un processo in base al nome del comando.

Ricerca Con Comando Htop

Come terminare i processi

Ci sono due metodi principali per terminare un processo su Linux: usare kill o pkill, come vedremo questi due comandi hanno lo stesso identico effetto.

Cosa cambia allora?

Dipende da quanto conosciamo quel processo, infatti, il comando kill richiede l’ID del processo, mentre se vogliamo usare semplicemente il nome, possiamo usare pkill che ci permette di farlo.

Vediamo con esempi pratici come usare i due comandi.

Comando kill

Il comando kill ci permette di terminare uno o più processi direttamente da terminale. Questo comando può essere usato sia per chiudere un programma che per forzarne la chiusura. La seconda opzione è utile quando un programma smette di rispondere.

Se usiamo il comando kill senza altre opzioni, di default viene mandato un segnale SIGTERM (segnale 15). Questo è un modo di terminare i programmi in maniera soft, perché invia al processo una richiesta di chiusura, senza però forzarla.

Il comando si usa così:

kill [pid]

Bisogna quindi indicare l’ID del processo che vogliamo terminare.

Per esempio:

kill 25614

Se non riusciamo a terminare il processo in questo modo, può essere richiesta una chiusura forzata, in questo caso si utilizza il segnale SIGKILL e bisogna quindi indicare l’opzione -9, in questo modo:

kill -9 [pid]

Prendendo come esempio il PID di prima, avremo:

kill -9 25614

Suggerimento: nel caso precedente avremmo potuto usare il comando kill -15, ma visto che SIGTERM è l’opzione di default, non è necessario specificarla in modo esplicito perché i due comandi sono equivalenti.

Per conoscere tutti i segnali, puoi usare dare il comando:

kill -l

Vedrai come output la lista seguente:

Lista Segnali Comando Kill

Comando pkill

Come abbiamo appena visto, per poter utilizzare il comando kill dobbiamo conoscere il l’ID del processo che vogliamo terminare. Per trovare l’ID possiamo usare uno dei comandi che abbiamo visto all’inizio di questa guida sulla gestione dei processi, come ps o top.

In alternativa, possiamo usare il comando pkill che permette di interrompere l’esecuzione di un processo conoscendone il nome.

Per esempio per chiudere il processo associato all’editor Kate, potrei dare il comando in questo modo:

pkill kate
Comando Pkill Linux

È importante fare attenzione nell’usare questo comando perché se ci sono più processi che hanno lo stesso nome, andremo a terminare più processi.

Per questo nella maggior parte dei casi è più utile utilizzare direttamente il PID per riuscire a terminare un processo specifico. In alternativa potresti usare le espressioni regolari (regex) per indicare il nome del processo ed evitare errori.

Come cambiare la priorità dei processi

Ai processi viene associata automaticamente una priorità, come immaginerai se un processo ha una priorità maggiore, vuol dire che gli saranno garantite più risorse.

Con i comandi nice e renice possiamo gestire manualmente la priorità.

Comando nice

Il comando nice ci permette di avviare un programma impostando una priorità definita da noi.

Di default la priorità dei processi è 0. Il valore di nice può andare da -20 (priorità più alta) a 19 (priorità più bassa).

Per impostare una priorità ci basta usare il comando in questo modo:

nice -n [valore] [comando]

Per esempio:

nice -n 10 nano

Questo comando avvia il processo, nano, impostando un nice value di 10.

Comando renice

Se vogliamo cambiare la priorità di un processo già avviato possiamo usare il comando renice.

Il procedimento è simile a quello che abbiamo appena visto per nice, ma in questo caso la sintassi da seguire è questa:

renice [priorità] -p [pid]

Per esempio per impostare a 15 il processo 26057, useremo il comando in questo modo:

renice 15 -p 26057
Modificare Priorita Comando Renice

Dopo aver cambiato la priorità vedremo un messaggio in output che ci indica qual era la priorità precedente e qual è la nuova.

Possiamo anche usare i comandi che abbiamo visto prima, ad esempio htop come nell’esempio qui sopra, per fare un ulteriore verifica e nella colonna “NI” (nice value) vedremo il nuovo valore che abbiamo impostato.

Conclusioni

Saper gestire i processi su Linux può essere utile in diverse occasioni, ci permette di capire se un programma che credevamo chiuso, sta in realtà ancora lavorando in background, o se c’è un processo che sta saturando tutte le risorse.

Con i comandi che abbiamo visto si possono gestire al meglio i processi, dall’identificare quelli attivi fino a saperli terminare o modificarne la priorità.

E tu, conoscevi già questi comandi? Facci sapere in un commento.

Categorie
Indice dei contenuti

    🚀

    Articoli correlati

    Commenti

    Lascia un commento

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