Presenteremo ora un altro comando, ovvero ps, abbreviazione di process status. Questo comando restituisce nel terminale un elenco di processi che potranno mutare anche immediatamente dopo essere stati elencati. Un utente che desidera interagire con i processi manualmente tenderà quindi a preferire top perché questo gli consentirà di fotografare la situazione a intervalli di tempo. Il comando ps, tuttavia, per la sua stessa natura, si integra facilmente con eventuali script e automatismi che potremmo voler creare. La sua conoscenza risulta quindi imprescindibile.
Innumerevoli implementazione di ps hanno accompagnato la storia dei sistemi operativi basati su UNIX, BSD e GNU/LINUX adottando fra l’altro formati di visualizzazione diversi e spesso incompatibili fra loro. Come prima cosa vi suggeriamo di invocare man ps per scoprire in che “lingue” potrete parlare con "il" ps che avete davanti e come questo vi risponderà.
Spesso, specie nei sistemi più moderni, potrete interrogare ps in diversi modi. Occorre però fare attenzione per non confondersi. Nel sistema che utilizziamo per il nostro esempio possiamo effettuare richieste in stile BSD e UNIX. In entrambi i casi potremo raggruppare più richieste per combinarne gli effetti. Quando facciamo precedere le opzioni dal segno dash ovvero meno “-” queste saranno interpretate come formulate in stile UNIX. Quando, invece, omettiamo il dash stiamo adottando lo stile BSD. Potremo fare anche richieste utilizzando un terzo stile. Se intendiamo inoltrare istanza per ottenere un output in risposta a una linux long option dobbiamo anteporre all’opzione due dash. Come vedete nell’esempio seguente la stessa opzione genera tre risultati completamente diversi se è utilizzata con le varie combinazioni possibili di dash.
fprincipe@html52:~$ ps e
PID TTY STAT TIME COMMAND
2404 tty1 S+ 0:00 -bash INVOCATION_ID=3c3aa0d21a4847e387677898b63ea35f
3565 pts/0 Ss 0:00 -bash LANG=en_US.UTF-8 USER=fprincipe LOGNAME=fprinci
4307 pts/0 R+ 0:00 ps e LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:
fprincipe@html52:~$ ps -e
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:00 kthreadd
4 ? 00:00:00 kworker/0:0H
[...]
4308 pts/0 00:00:00 ps
fprincipe@html52:~$ ps --e
error: unknown gnu long option
Nel primo caso ci restituisce l’enviroment, nel secondo caso corrisponde a una selezione di tutti i processi mentre nel terzo caso restituisce un errore perché non è disponibile un’azione corrispondente al comando in questione. Questa è forse la principale insidia del comando ps. Compresa la particolarità orientarvi non sarà un problema.
Visualizzazioni di ps
Il comando opera fondamentalmente in questo modo: lo istruite su quali processi elencare e su come li volete visualizzare. Tutti e tre gli stili presentati hanno opzioni che possono agire nei due diversi ambiti di ps ovvero selezione e visualizzazione. L’elenco di opzioni possibili è sterminato e varia da implementazione a implementazione quindi anche in questo caso un buon consiglio è affidarsi a una lettura attenta di ciò che ottenete in risposta al comando man ps.
Altra cosa importante da sapere è che occorre far attenzione alle scelte di default se si vogliono evitare grossolani errori. Per capirlo vi invito a osservate l’esempio seguente.
fprincipe@html52:~$ ps
PID TTY TIME CMD
3565 pts/0 00:00:00 bash
4343 pts/0 00:00:00 ps
fprincipe@html52:~$ ps -u fprincipe2
PID TTY TIME CMD
3821 ? 00:00:00 systemd
3822 ? 00:00:00 (sd-pam)
3910 ? 00:00:00 sshd
3911 pts/1 00:00:00 bash
3916 pts/1 00:00:00 nano
fprincipe@html52:~$ ps -u fprincipe2 -o pcpu,comm,etime
%CPU COMMAND ELAPSED
0.0 systemd 02:35:56
0.0 (sd-pam) 02:35:56
0.1 sshd 02:35:56
0.2 bash 02:35:56
0.1 nano 02:35:27
Nel primo caso abbiamo lanciato il comando puro. La scelta di default ci restituisce solo i processi dello stesso utente agganciati alla medesimo terminale (TTY) però sotto la superficie c'è molto altro. Quando chiediamo di visualizzare i processi di un utente con cui condividiamo la macchina scopriamo, infatti, che per l’utente in questione sono in esecuzione alcuni processi. Poi ci concentriamo sugli stessi processi appena presi in esame ma con l’opzione -o chiediamo di visualizzare nell’ordine: la percentuale di utilizzo della cpu, il comando che ha generato il processo e il tempo trascorso dal lancio del comando.