Come visualizzare i processi attivi, in Linux: il comando ps
Anche se il tuo server Linux sembra inattivo, in realtà nasconde una serie di processi in esecuzione in background.
Esistono diversi strumenti che possiamo usare per identificare i processi sul nostro sistema: conoscerli ci consentirà di verificarne l'impatto sulle risorse del sistema (CPU e RAM), e, se necessario, di terminarli.
Il comando ps: visualizzare l'elenco dei processi
Il comando ps, con l'opzione -e, elenca tutti i processi in esecuzione
ps -e
Il risultato sarà una lista come questa
PID TTY TIME CMD
1 ? 00:20:38 systemd
2 ? 00:00:04 kthreadd
3 ? 00:00:03 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:11 migration/0
8 ? 00:00:00 rcu_bh
9 ? 02:28:54 rcu_sched
10 ? 00:00:00 lru-add-drain
11 ? 00:01:37 watchdog/0
12 ? 00:01:11 watchdog/1
13 ? 00:00:10 migration/1
14 ? 00:00:04 ksoftirqd/1
16 ? 00:00:00 kworker/1:0H
17 ? 00:01:14 watchdog/2
18 ? 00:00:09 migration/2
19 ? 00:03:53 ksoftirqd/2
21 ? 00:00:00 kworker/2:0H
22 ? 00:01:09 watchdog/3
23 ? 00:00:22 migration/3
24 ? 00:00:03 ksoftirqd/3
26 ? 00:00:00 kworker/3:0H
28 ? 00:00:00 kdevtmpfs
29 ? 00:00:00 netns
30 ? 00:00:07 khungtaskd
......................................
Questo è solo un estratto della lista dei processi presenti sul nostro server Linux: un server Linux presenta infatti un gran numero di processi in esecuzione.
L'elenco presenta quattro colonne:
- PID: è l' ID (identificativo) del processo, utile nel caso volessimo terminare ("killare") il processo.
- TTY: è il terminale su cui è in esecuzione il processo. Un punto interrogativo nella colonna significa che il processo non è collegato a nessun terminale, ma è in esecuzione in background.
- TIME: è la durata di esecuzione del processo
- COMMAND: indica il come del comando che ha lanciato il processo
Se volessimo visualizzare solo 20 righe per volta:
ps -e | more -20
Un utilizzo molto diffuso del comando "ps" è con l'opzione "aux", con cui ottenimao la lista dei processi attivi con il relativo consumo di CPU e RAM
ps -aux | more -20
L'opzione a indica la visualizzazione dei processi di tutti gli utenti, ad eccezione di quei processi che non sono associati a un terminale, quindi che sono in background.
L'opzione u fornisce informazioni dettagliate sui processi.
L'opzione x elenca i processi non associati ad un terminale. Sono processi che vengono avviati all'avvio e che sono in esecuzione in background.
Il risultato sarà il seguente
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 191112 3788 ? Ss 2019 20:38 /usr/lib/systemd/systemd --system --deserialize 17
root 2 0.0 0.0 0 0 ? S 2019 0:04 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2019 0:03 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2019 0:11 [migration/0]
root 8 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 2019 148:54 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 2019 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 2019 1:37 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 2019 1:11 [watchdog/1]
root 13 0.0 0.0 0 0 ? S 2019 0:10 [migration/1]
root 14 0.0 0.0 0 0 ? S 2019 0:04 [ksoftirqd/1]
root 16 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/1:0H]
root 17 0.0 0.0 0 0 ? S 2019 1:14 [watchdog/2]
root 18 0.0 0.0 0 0 ? S 2019 0:09 [migration/2]
root 19 0.0 0.0 0 0 ? S 2019 3:53 [ksoftirqd/2]
root 21 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/2:0H]
root 22 0.0 0.0 0 0 ? S 2019 1:09 [watchdog/3]
root 23 0.0 0.0 0 0 ? S 2019 0:22 [migration/3]
Le colonne presentano queste informazioni
- USER: l'utente che esegue il processo.
- PID: l'identificativo del processo
- %CPU: la % di utilizzo della CPU
- %MEM: la % di utilizzo della RAM
- VSZ: la dimensione della memoria virtuale (Virtual Size) del processo, espressa in KiB.
- RSS: la dimensione della memoria fisica (Resident Set Size) utilizzata dal processo.
- TTY: è il terminale su cui è in esecuzione il processo. Un punto interrogativo nella colonna significa che il processo non è collegato a nessun terminale, ma è in esecuzione in background.
- STAT: è un codice identificativo dello stato del processo. Può essere Z (zombie), S (sleeping), R (in esecuzione: running) ....
- START: l'ora di inizio del comando.
- TIME: è la durata di esecuzione del processo
- COMMAND: indica il come del comando che ha lanciato il processo
Ordinare l'output di ps
E' possibile ordinare l'output di ps in base all'utilizzo di memoria utilizzando l'argomento sort come segue
ps aux --sort=-%mem
Analogamente per ordinare in base all'utilizzo di cpu
ps aux --sort=-%cpu
Trovare un processo con pgrep
Il comando pgrep è una combinazione di ps e grep, in cui occorre specifcare il nome, o parte del nome, di un processo che stiamo cercando: verrà restituita la lista dei processi, o il processo, con quel nome.
Ad esempio, per estrarre i processi "ssh" attivi utilizziamo
pgrep ssh
Il risultato sarà ad esempio il seguente: sono precesenti 2 processi attivi, di cui viene reso il PID
31971
32352
Per avere il dettaglio del singolo processo utilizziamo
ps -e | grep 31971
oppure
ps -aux | grep 31971
I processi associati alla shell corrente
Digitando semplicemente "ps", senza argomenti, otteniamo i processi della shell corrente
ps
Il risultato, ad esempio, è
PID TTY TIME CMD
9739 pts/0 00:00:00 bash
10845 pts/0 00:00:00 ps
I processi dell'utente attivo
Per visualizzare i tuoi processi, cioè i processi dell'utente con cui hai effettuato il login, utilizziamo l'agomento -x
ps -x
I processi di uno specifico utente
Per visalizzare i processi generati da uno specifico utente, ad esempio l'utente root, utilizziamo l'argomento U seguito dal nome utente
ps -U pippo
In conclusione: il comando ps è uno dei comandi più utilizzati per il monitoraggio di un server Linux, ha molte opzioni ed in questo articolo abbiamo visti solo alcuni esempio di utilizzo.