Introduzione

Quando si lavora su una macchina Linux, a volte potrebbe essere necessario scoprire quali processi sono attualmente in esecuzione. Esistono numerosi comandi che è possibile utilizzare per trovare informazioni sui processi in esecuzione, con ps e top essere i più utilizzati.

In questo articolo, parleremo del comando pstree. È simile ps, ma invece di elencare i processi in esecuzione, li mostra in un albero. Il formato ad albero è un modo più conveniente per visualizzare la gerarchia dei processi e rende l'output più visivamente accattivante.

Se desideri usare il comando Pstree su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Come usare il comando pstree

La sintassi generale per il comando pstree è la seguente:

ps [OPTIONS] [USER or PID]

Nella sua forma più semplice quando viene invocato senza alcuna opzione o argomento, pstree visualizza una struttura ad albero gerarchica di tutti i processi in esecuzione.

Sulle distribuzioni Debian e derivate dovrebbe già essere installato di default, altrimenti eseguire questo comando:

sudo apt-get install psmisc

Per installarlo su CentOS/RHEL dare il seguente comando:

sudo yum install psmisc

Per utilizzare il comando senza nessuna opzione, digitare semplicemente pstree:

pstree
systemd─┬─VBoxService───7*[{VBoxService}]
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─2*[agetty]
        ├─atd
        ├─cron
        ├─dbus-daemon
        ├─irqbalance───{irqbalance}
        ├─2*[iscsid]
        ├─lvmetad
        ├─lxcfs───2*[{lxcfs}]
        ├─networkd-dispat───{networkd-dispat}
        ├─nginx───2*[nginx]
...

L'elemento top/root nella struttura è il processo principale di tutti i processi di sistema. In questo esempio, ovvero systemd, è il primo processo che si avvia all'avvio.

pstree unisce rami identici mettendoli tra parentesi quadre e prefissandoli con un numero intero che rappresenta il numero di rami. Ciò rende l'output più leggibile e visivamente accattivante.

Di seguito è riportato un esempio che mostra come vengono utilizzate le parentesi quadre:

├─2*[agetty]

è uguale a:

├─agetty        
├─agetty

Per disabilitare l'unione dei rami identici, utilizzare l'opzione -c:

pstree -c

I thread di un processo sono mostrati sotto il processo genitore e visualizzati usando il nome del processo tra parentesi graffe. Ecco un esempio:

├─lxcfs───2*[{lxcfs}]

Utilizzare l'opzione -t per mostrare i nomi dei thread completi. Se vuoi nascondere i thread e mostrare solo i processi usa l'opzione -T.

In genere, pstreevisualizza molte righe di output che non si adattano allo schermo. Per visualizzare l'output una pagina alla volta, esegui il pipe al comando less:

pstree | less

Se un nome utente viene fornito come argomento, pstree mostra solo i processi di proprietà di quell'utente. Ad esempio, il comando seguente mostrerà solo quei processi che sono stati avviati da un utente chiamato noviello:

pstree noviello

Quando il PID viene specificato come argomento, pstree visualizza un albero con il processo indicato come root  dell'albero. Ecco un esempio:

pstree 1943
sshd───bash───pstree

Per mostrare i processi padre di un determinato processo utilizzare l'opzione -s seguita dal processo PID:

pstree -s 1943
systemd───sshd───sshd───bash───pstree

Mostrare PID e PGID

Di solito, quando si esegue il comando pstree, l'informazione più importante che l'utente sta cercando è l'ID del processo. Ad esempio, conoscere il PID consente di interrompere un processo non funzionante.

L'opzione -p indica al comando pstree di mostrare i PID:

pstree -p

I PID sono mostrati tra parentesi dopo ogni processo o thread.

systemd(1)─┬─VBoxService(955)─┬─{VBoxService}(956)
           │                  ├─{VBoxService}(957)
           │                  ├─{VBoxService}(958)
           │                  ├─{VBoxService}(959)
           │                  ├─{VBoxService}(960)
           │                  ├─{VBoxService}(961)
           │                  └─{VBoxService}(962)
...

Per impostazione predefinita, pstree ordina i processi con lo stesso genitore per nome. L'opzione -n permette di usare l'ordinamento numerico, cioè l'ordinamento per PID:

pstree -pn

L'ID gruppo PGID o PGID è l'ID processo del primo membro del gruppo processo. Per visualizzare i PGID utilizzare l'opzione -g:

pstree -g

I PID sono anche mostrati tra parentesi dopo ogni processo o thread.

systemd(1)─┬─VBoxService(954)─┬─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  └─{VBoxService}(954)
...

Quando vengono visualizzati PID o PGID, l'unione è disabilitata implicitamente.

Mostrare argomenti della riga di comando

Alcuni programmi possono essere richiamati con le opzioni di configurazione specificate come argomenti della riga di comando.

Per impostazione predefinita, pstree non mostra gli argomenti della riga di comando per i processi in esecuzione. Per visualizzare come è stato avviato il processo, utilizzare il comando insieme all'opzione -a:

pstree -a
...
  ├─agetty -o -p -- \\u --keep-baud 115200,38400,9600 ttyS0 vt220
  ├─agetty -o -p -- \\u --noclear tty1 linux
...

Evidenziare un processo

pstree consente inoltre di evidenziare i processi per una migliore rappresentazione visiva.

L'opzione -h indica a pstree di evidenziare il processo corrente e tutti i suoi antenati.

pstree -h

Per evidenziare un processo specifico, utilizzare l'opzione -H seguita dall'ID del processo:

pstree -H PID_NUMBER

Se l'evidenziazione non è supportata, il comando verrà chiuso con un errore.

Conclusione

Il comando pstree visualizza i processi in esecuzione sotto forma di una struttura ad albero.

Per informazioni su tutte le opzioni di pstree disponibili, digitare il comando man pstree nel terminale.

man pstree