Ogni singolo istante, un sistema Linux ha in genere centinaia o talvolta anche migliaia di processi in esecuzione simultaneamente. Un processo è semplicemente un programma in esecuzione (per esempio un terminale, un server web, un’interfaccia GUI e molto altro ancora). Un buon sistemista, e in particolare un buon ethical hacker o pentester, deve capire come vengono gestiti i processi per ottimizzare le prestazioni dei sistemi. Ad esempio, quando un malintenzionato prende il controllo di un sistema potrebbe voler trovare e interrompere un determinato processo.
In questo articolo imparerai a visualizzare e trovare i processi e scoprire quali consumano più risorse nel tuo sistema. Imparerai anche ad eseguire i processi in background, dando loro delle priorità, e se necessario terminarli.
Nella maggior parte dei casi, il primo passaggio nella gestione dei processi, è niente meno che visualizzarli. Lo strumento principale per la visualizzazione dei processi nei sistemi Linux è ps
. Eseguilo a terminale per visualizzare l’output.
Il kernel Linux assegna un process ID (PID) univoco a ciascun processo. Quando si lavora con i processi, è spesso necessario specificare il loro PID anziché il nome del processo. Da solo, il comando ps
non ti fornisce moltissime informazioni. Eseguito in questo modo, infatti, elenca i processi avviati (o meglio invocati) dell’utente corrente in questo terminale. Qui infatti ci indica che la shell ZSH è aperta ed abbiamo eseguito il comando ps
.
Per stampare a video un output più verboso, che ci elenchi molte più informazioni anche su processi avviati da altri utenti, possiamo utilizzare il comando in questo modo:
ps aux
Analizziamo insieme alcune delle colonne più importanti:
In generale per eseguire qualsiasi azione su un processo abbiamo bisogno del suo PID. Vediamo prima come identificare un determinato processo in questa lunga lista e poi sfruttiamo il PID per svolgere determinate azioni.
Come abbiamo visto, ps aux
ha generalmente un output molto corposo e dispersivo. Se vogliamo identificare un processo specifico possiamo avvalerci del comando grep
per prelevare informazioni su quel processo.
Apriamo due TAB sul nostro terminale.
Su una eseguiamo il comando msfconsole
.
Sull’altro digitiamo ps aux | grep msfconsole
.
Questo più o meno sarà il risultato che dobbiamo aspettarci.
In questo modo possiamo prendere il PID relativo a msfconsole
(di questa istanza) ed eseguire azioni su di esso.
Inoltre possiamo vedere quante risorse sta usando in questo momento msfconsole
.
Se invece avviassimo un’istanza di msfconsole con i permessi di root (sudo msfconsole
) l’output generato sarà molto simile a questo.
Possiamo notare che oltre al PID che identifica un nuovo processo, anche l’utente che ha lanciato il comando è cambiato.
C’è da sottolineare che il comando ps
ordina i processi per PID (e quindi per ordine di avvio).
Se volessimo avere una panoramica generale sulle prestazioni dei processi che girano in background e non, possiamo avvalerci del comando top
.
Infatti, il comando top
visualizza i processi dal più esoso al più leggero.
Con il tasto H
possiamo accedere ad un elenco di comandi interattivi. Per gestire i processi tramite top
.
Quando esegui un comando la shell attende fino a quando lo stesso non viene completato, prima di offrire la possibilità di eseguirne un altro. A volte infatti, vorresti eseguire un processo in background continuando ad interagire con la shell.
Per esempio, proviamo ad aprire un editor di testo e vediamo come si comporta la shell.
In questo caso specifico se volessimo runnare il nostro script sarebbe impossibile.
La prima cosa che potrebbe venire in mente è: ‘apro un altro terminale’.
Purtroppo non è la via migliore. Possiamo dunque avvalerci del fatto che noi possiamo mandare un processo in background e continuare ad usare normalmente la nostra shell! Come? Così:
gedit carlino.py &
In questo modo ho usato una sola istanza del terminale, posso modificare il mio script, salvarlo e runnarlo o continuare ad usare la shell normalmente.
Capiterà, a volte, che un processo consumi troppe risorse causando problemi al corretto funzionamento del sistema.
Quando identifichi un processo problematico potresti volerlo fermare. In questo caso ci viene in aiuto il comando kill
.
Il comando kill
ha 64 differenti signals.
La sintassi del comando è : kill -signal PID
.
Andiamo a descrivere alcuni dei signals più importanti:
Nome del segnale | Numero associato | Descrizione |
SIGHUP | 1 | Conosciuto come Hangup(HUP) signal. Ferma il processo designato e lo riavvia con lo stesso PID. |
SIGINT | 2 | Interrupt(INT) signal. È generalmente il segnale che viene inviato quando digitiamo CTRL + C. |
SIGQUIT | 3 | Core dump. Termina il processo e salve le informazioni in memoria. Queste informazioni poi verranno scritte nella directory corrente nel file core. |
SIGTERM | 15 | Termination(TERM) signal. Questo è il segnale di default se non ne viene specificato nessuno. |
SIGKILL | 9 | Kill signal. Forza l’arresto del processo reindirizzando le risorse in /dev/null. |
Ecco un esempio se volessimo killare un processo.
Identifichiamo prima il suo PID come descritto sopra. Dopodiché possiamo eseguire il comando:
kill -9 <PID>
Se l’articolo vi è piaciuto, potete continuare a seguirci, oltre che su questo blog, anche sugli altri canali attivi e ricchi di contenuti: Twitch e YouTube.
Non esitate a lasciarci feedback, domande o precisazioni nei commenti o sui nostri canali social di Telegram e Discord!
Entra a far parte della nostra community!
Registrati subito per commentare video e articoli.