Guida ai comandi Linux: i processi

Guida ai comandi Linux: i processi

di Pubblicato: 9 agosto 2017 0 commenti

In una delle guide precedenti abbiamo visto come gestire il sistema operativo. In questo articolo vediamo come gestire i processi di sistema.

Vedere.

Il più famoso è sicuramente “top“, e nella maggioranza dei casi viene avviato senza opzioni. Ma in realtà questo programma è davvero molto versatile.

Nella veste base ci mostra i processi attivi in tempo reale, quindi vedremo oltre alla prima parte che mostra lo stato generale del sistema, una lunga lista tabellare con i vari processi. La colonna S ad esempio ci mostra lo stato di ognuno di questi processi, se è presente la lettera Z significa che il processo è zombie, ovvero in uno stato inconsistente e quindi andrebbe “ucciso“.

Con il programma in funzione si possono operare molte scelte, ad esempio se premete la Z maiuscola (quindi shift+z) avrete la possibilità di modificare i colori. Se premete shift+L avrete la possibilità di cercare all’interno dei vari processi per evidenziare quello interessato.

Con il tasto k potremo “killare” un processo, fornendogli il numero di PID, tutto senza dover necessariamente uscire dall’interfaccia.

Se premete il tasto h, avrete accesso alle varie opzioni che top offre.

Un altro programma famoso è “ps“, che mostra in questo caso in modo statico (cioè lo stato al momento in cui viene impartito il comando) per cui spesso viene utilizzato per una analisi.

Se fornito senza opzioni vedremo poco:

  PID TTY          TIME CMD
 4870 pts/2    00:00:00 bash
 5034 pts/2    00:00:00 ps

quindi vanno aggiunti altri parametri, il più utilizzato è “ps Aux“, dove “A” indica tutti i processi (attenzione l’utilizzo di “a” minuscola, indica tutti i processi non relativi al terminale, quindi non vedremo esattamente tutti i processi!); “u” mostra l’utente relativo al processo, mentre “x” mostra se presente la porta (tty) di collegamento al processo.

A mio avviso l’utilizzo di Aux non è molto utile, lo è se aggiungiamo l’opzione f davanti, che permette di vedere i vari processi indentati a seconda del processo padre.

Ovviamente è possibile concatenare, come abbiamo visto nell’articolo “come cercare” l’istruzione “grep” che ci permetterà di filtrare i risultati; ad esempio stiamo cercando i processi che riguardano chrome

ps fAux | grep -i "chrome"

Esiste, e non è per nulla noto, un comando che abbina ps e grep, e si chiama “pgrep”

pgrep chrome

In questo caso ci verranno ritornati direttamente i PID relativi a questo programma, utile ad esempio nell’utilizzo di script bash.

Uccidere.

Prima con “top” abbiamo accennato alla possibilità di “uccidere” un processo, ad esempio perché si è bloccato o abbiamo perso il controllo. Esiste anche per questo uno specifico comando, in genere utilizzato dopo aver utilizzato “ps“, poiché da esso andremo a dedurre quale PID (processo ID) utilizzare per operare.

kill 1104

Nell’esempio sopra “uccideremo” il processo 1104. E’ possibile uccidere molti processi in contemporanea, se oltre a 1104 andremo a specificare, separati da uno spazio, altri PID:

kill 1104 1132 2391

Nel caso invece si necessiti di “buttare giù” un processo, o meglio una “famiglia” di processi andremo ad utilizzare il comando “killall”

killall chrome

in questo caso tutti i processi che si chiamano chrome verranno spenti. Infatti non è detto che un programma abbia necessariamente un solo processo, ma ad esempio il browser chrome avrà tanti processi quante sono le tab e le estensioni installate.

Sia kill che killall hanno la possibilità di poter scegliere la tipologia di “uccisione” attraverso segnali specifici. Non mi addentro sulla questione, il più utilizzato è “-SIGTERM” oppure “-9” visto che è la medesima cosa. Questo comando può essere inteso come una sorta di rafforzo, e può essere utilizzato qual’ora dando il comando senza opzioni non si ottenga l’effetto desiderato.

killall -9 chrome
kill -9 1104

Similarmente a quanto visto per “pgrep” esiste una controparte che si chiama “pkill” che ci permette in modo simile a killall di scegliere i processi in base al nome del programma. Rispetto a “pgrep” dove è comunque presente, l‘opzione -u qui torna utile per scegliere il processo ma limitatamente al possesso di uno specifico utente:

pkill -u utente chrome

con l’esempio riportato andremo a chiudere i processi chome di “utente” ma non ad esempio quelli di un altro utente. Può essere interessante ad esempio nei webserver con più domini e utenti di sistema, dove potremo circoscrivere con certezza le azioni di “kill” ad una determinata utenza.

Mappa di memoria.

Sconosciuta, ma a dire il vero con un suo perché, è la possibilità di vedere la mappa di memoria associata ad un processo. In questo caso è necessario conoscere il PID, quindi ci andremo ad avvalere di “ps” o “pgrep” citati in precedenza, e daremo li comando:

pmap 1104

verrà mostrata la mappa di memoria associata a questo PID. L’utilità di questo comando è per lo più a chi deve effettuare il debug di un programma, oppure per verificare l’utilizzo di determinate librerie da parte di un programma.

Background e foreground.

Non è molto noto, ma è possibile “nascondere” e riprendere uno o più programmi dando tridimensionalità ai processi. Andremo ad utilizzare i comandi bg (background), jobs e fg (foreground).

In sostanza si avvia un programma, poi si preme CTRL+Z che richiama la shell. In questo momento il programma ha perso la possibilità di essere richiamato, ma di fatto continua ad essere presente come processo.

A questo punto diamo il comando “bg“. A video viene indicato un ID. Se diamo il comando “jobs” vedremo quanti “lavori” sono attivi in background e quali ID sono stati assegnati.

Con il comando “fg 1” andremo a riportare a video il programma con ID1.

Si tratta di una eccellente tecnica qual’ora si necessiti di mandare in background un programma avviato normalmente. Ad esempio è il caso di un processo che richiede moltissime ore per essere eseguito, come ad esempio computazione di dati oppure un backup. Con questo sistema possiamo “sganciarlo” dalla shell e mantenerlo funzionante tra i processi, quindi chiudere del tutto la shell mantenendo lo stesso attivo e funzionante, per poi riprenderlo una volta che si torna al sistema.

Guida ai comandi Linux

Vuoi dire o aggiungere qualcosa?

sezione commenti aperta al pubblico

Non ci sono ancora commenti!

Puoi essere il primo a commentare.

Rispondi