Cos'è il comando ps in Linux?
Il comando ps in Linux viene utilizzato per visualizzare i processi in esecuzione sul sistema. Puoi ottenere informazioni come l'ID processo (PID) per i processi che tu o qualsiasi altro utente state eseguendo sullo stesso sistema Linux.
Il comando ps è di per sé uno strumento completo e ha oltre 80 opzioni di comando. Puoi capirne la forza e la complessità. Questo è il motivo per cui ti mostrerò alcuni degli esempi più comuni e più utili del comando ps in Linux.
Utilizzo essenziale del comando ps in Linux
Se usi il comando ps senza alcuna opzione in Linux, mostrerà i processi in esecuzione nella shell corrente:
ps
Questa è l'uscita. Ho inviato il comando Gedit in background, ecco perché mostra tre processi altrimenti normalmente vedrai solo ps e bash.
PID TTY TIME CMD
503 pts/0 00:00:00 gedit
2053 pts/0 00:00:00 ps
31585 pts/0 00:00:00 bash
Qui:
- PID è l'ID processo univoco del processo
- TTY è il tipo di terminale a cui l'utente ha effettuato l'accesso. pts significa pseudo terminale
- TIME ti indica da quanto tempo è stato eseguito il processo
- CMD è il comando che esegui per avviare il processo
Ora questo non fornisce alcuna informazione reale e utile. Vediamo alcuni esempi migliori del comando ps:
1. Guarda tutto il tuo processo in esecuzione
Se vuoi vedere tutti i processi eseguiti da te, puoi usare il comando ps con l'opzione x in questo modo:
ps -x
L'opzione x mostrerà tutti i processi anche se non sono associati al tty corrente (tipo di terminale) o se non hanno un terminale di controllo (come i demoni).
L'opzione – before x è facoltativa ma la convenzione generale di Linux prevede l'uso di – before options quindi ti consiglio di continuare a seguirla. Non ti farà male.
Ecco come appare l'output. Ho troncato l'output perché aveva centinaia di righe:
PID TTY STAT TIME COMMAND
503 pts/0 Sl 0:00 gedit
2245 ? S 0:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
3039 ? Ss 0:00 /lib/systemd/systemd --user
3040 ? S 0:00 (sd-pam)
3054 ? SLl 0:01 /usr/bin/gnome-keyring-daemon --daemonize --login
3059 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env
Lo STAT nell'output sopra indica i codici di stato del processo. Puoi trovare una tabella dettagliata nella pagina man del comando ps.
Ma raramente vedrai il comando ps usato solo con l'opzione x. Di solito è accompagnato dall'opzione u in questo modo:
ps -ux
Con l'opzione u, avrai informazioni dettagliate su ogni processo:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
abhishek 503 0.0 0.4 681580 37516 pts/0 Sl 18:09 0:00 gedit
abhishek 2245 0.0 0.0 11300 1496 ? S 18:37 0:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
abhishek 3039 0.0 0.0 77344 3508 ? Ss 10:37 0:00 /lib/systemd/systemd --user
abhishek 3040 0.0 0.0 114632 360 ? S 10:37 0:00 (sd-pam)
abhishek 3054 0.0 0.1 517104 11512 ? SLl 10:37 0:01 /usr/bin/gnome-keyring-daemon --daemonize --login
Come puoi vedere, ora ottieni il nome utente e il consumo della CPU e l'utilizzo della memoria di ciascun processo. RSS mostra quanta memoria ha attualmente il processo nella RAM mentre VSZ è quanta memoria virtuale ha il processo in totale.
2. Visualizza tutti i processi in esecuzione con il comando ps aux
Probabilmente vedrai ps -aux
o ps aux
tutto il tempo in tutorial e documentazioni Linux.
Con l'opzione -a aggiunta, puoi vedere i processi in esecuzione di tutti gli utenti sul sistema Linux.
ps -aux
L'output del comando è lo stesso di ps -ux ma ora hai anche processi di altri utenti. Grazie all'opzione -u, puoi identificare quale processo appartiene a quale utente.
3. Visualizza tutti i processi in esecuzione con il comando ps -ef in Linux
Oltre a ps -aux, puoi anche elencare tutti i processi in esecuzione con il comando -e. La pratica comune è combinarla con l'opzione f per ottenere l'elenco completo dei comandi utilizzati per eseguire i processi.
ps -ef
Nota che – prima di e è importante altrimenti mostrerà risultati diversi. Te l'ho detto, ps è un comando incasinato e complicato.
Puoi anche combinare l'opzione H per vedere tutti i processi in una vista a thread con i processi figlio sotto i loro genitori:
ps -efH
4. Visualizza tutti i processi in esecuzione di un determinato utente
Per ottenere le informazioni su tutti i processi eseguiti da un determinato utente, puoi utilizzare l'opzione -U con il nome utente:
ps -U user_name
Ad esempio, posso vedere tutti i processi eseguiti dall'utente root in questo modo:
ps -U root
PID TTY TIME CMD
1 ? 00:00:41 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
8 ? 00:00:00 mm_percpu_wq
9 ? 00:00:03 ksoftirqd/0
10 ? 00:01:22 rcu_sched
5. Visualizza tutti i processi eseguiti da un gruppo
Puoi anche classificare i processi in esecuzione per gruppo anziché per utente fornendo il nome del gruppo o l'ID gruppo:
ps -G group_name_or_id
Puoi combinare con l'opzione f per ottenere l'elenco completo.
6. Ottieni tutte le occorrenze e il PID di un programma
Uno degli usi essenziali del comando ps è ottenere l'ID di processo (PID) di un programma in esecuzione. Normalmente quando stai cercando di uccidere un programma che si comporta in modo anomalo, cerchi tutte le occorrenze del programma, ottieni i loro PID e usi il comando kill per terminare il processo.
ps -C program__name
Ad esempio, se devo trovare tutte le istanze in esecuzione del gestore di pacchetti apt:
ps -C apt
PID TTY TIME CMD
11425 pts/1 00:00:00 apt
Puoi anche usare il comando grep per ottenere un risultato simile.
ps aux | grep program_name
7. Ottieni informazioni di processo su un PID
Bene! Hai un PID ma non sai a quale processo appartiene. È possibile utilizzare il comando ps per trovare le informazioni sul processo dal suo PID in questo modo:
ps -pN
Puoi utilizzare più di un PID separandoli con una virgola:
ps -pN1,N2,N3
Cos'altro?
Come ho detto prima, ps è un comando complicato ed esteso. Questi erano alcuni degli esempi di comandi ps più comuni di cui avrai bisogno la maggior parte del tempo. Se vuoi di più, puoi sempre fare riferimento alla sua pagina man.
Se hai qualche altro esempio utile di comando ps che usi regolarmente, perché non condividerlo con il resto di noi nella sezione commenti?