Come utilizzare il comando ps per monitorare i processi Linux

Una finestra terminale su un laptop Linux.
Fatmawati Achmad Zaenuri / Shutterstock

Ottieni un'istantanea dei processi in esecuzione sul tuo computer Linux con ps comando. Individua i processi in base al nome, all'utente o persino al terminale con tutti i dettagli di cui hai bisogno. Ti mostriamo come.

Gestione dei processi su Linux

Il cuore pulsante di tutti i sistemi operativi Linux e Unix è il kernel. Tra le sue numerose responsabilità vi è l'allocazione di risorse di sistema come RAM e tempo della CPU. Questi devono essere manipolati in tempo reale in modo che tutti i processi in esecuzione ottengano la loro giusta quota, in base alla priorità di ogni attività.

A volte le attività possono bloccarsi o entrare in un circuito stretto o non rispondere per altri motivi. Oppure possono continuare a funzionare, ma assorbire troppo tempo CPU o RAM o comportarsi in modo altrettanto anti-social. A volte i compiti devono essere uccisi come misericordia per tutti i soggetti coinvolti. Il primo passo. Certo, è identificare il processo in questione.

Ma forse non hai nessun problema con le attività o le prestazioni. Forse sei solo curioso di sapere quali processi sono in esecuzione all'interno del tuo computer e ti piacerebbe sbirciare sotto il cofano. Il ps comando soddisfa entrambi questi bisogni. Ti dà un'istantanea di ciò che sta accadendo all'interno del tuo computer “in questo momento”.

ps è abbastanza flessibile da darti esattamente le informazioni di cui hai bisogno nel formato che preferisci. Infatti, ps ha molte opzioni. Le opzioni descritte qui soddisfano le esigenze più comuni. Se hai bisogno di approfondire ps di quanto l'abbiamo preso in questo articolo, scoprirai che la nostra introduzione semplifica la digestione della pagina man.

Processi di quotazione

Il modo più semplice da usare ps è accenderlo senza parametri:

ps

ps in una finestra terminale

ps visualizza un elenco dei processi avviati dall'utente che ha eseguito il comando.

output da ps in una finestra terminale

Le quattro colonne sono:

  • PID: Il numero ID del processo.
  • TTY: Il nome della console a cui l'utente ha effettuato l'accesso.
  • TEMPO: La quantità di tempo di elaborazione della CPU utilizzata dal processo.
  • CMD: Il nome del comando che ha avviato il processo

Processo di quotazione per tutti gli utenti

aggiungendo il -e (seleziona tutti i processi) che possiamo fare ps elenca i processi che sono stati avviati da tutti gli utenti, non solo dall'utente che esegue ps comando. Poiché questa sarà una lunga lista, la stiamo inserendo less.

ps -e | less

ps -e | meno in una finestra terminale

L'elenco dei processi viene reindirizzato less.

L'output di ps -e è stato reindirizzato a meno in una finestra terminale

Abbiamo molte più voci nell'elenco, ma vediamo le stesse quattro colonne di prima. Le voci con un punto interrogativo ? nel TTY la colonna non è stata avviata da una finestra del terminale.

Mostra gerarchia dei processi

A volte può aiutare a capire un problema o identificare un particolare processo se riesci a vedere quali processi hanno avviato altri processi. Noi usiamo il -H (gerarchia) opzione per farlo.

ps -eH | less

ps -eH | meno in una finestra terminale

Il rientro indica quali processi sono genitori di quali altri processi.

output da ps -eH in meno in una finestra terminale

Per aggiungere un po 'più di chiarezza, possiamo chiedere ps per aggiungere alcune linee ASCII e disegnare la gerarchia come un albero. L'opzione per farlo è il --forest opzione.

ps -eH --forest | less

ps -eH --foresta | meno in una finestra terminale

Ciò semplifica il monitoraggio di quali processi sono i genitori di altri processi.

output di ps -eH --forest convogliato in less in una finestra terminale

Elencazione dei processi per nome

È possibile reindirizzare l'output da ps attraverso grep per elencare le voci che hanno nomi che corrispondono al termine di ricerca. Qui stiamo cercando voci che corrispondono al termine di ricerca “firefox”:

ps -e | grep firefox

ps -e | grep firefox in una finestra terminale

In questo caso, l'output è una singola voce per il processo che ci interessa. Naturalmente, se avessimo lanciato diverse istanze di Firefox, ci sarebbe più di un elemento restituito nell'elenco.

uscita da ps -e | grep firefox in una finestra terminale

Mostra più colonne nell'output

Per aggiungere più colonne all'output, utilizzare il -f (formato completo) opzione.

ps -ef | less

ps -ef | meno in una finestra terminale

Un set aggiuntivo di colonne è incluso nell'output di ps.

uscita da ps -ef | meno in una finestra terminale

Le colonne sono:

  • UID: L'ID utente del proprietario di questo processo.
  • PID: L'ID del processo.
  • PPID: ID processo principale del processo.
  • C: Il numero di bambini presenti nel processo.
  • STIME: Ora di inizio. Il momento in cui è iniziato il processo.
  • TTY: Il nome della console a cui l'utente ha effettuato l'accesso.
  • TEMPO: La quantità di tempo di elaborazione della CPU utilizzata dal processo.
  • CMD: Il nome del comando che ha avviato il processo.

Usando il -F (extra formato completo) possiamo ottenere ancora più colonne:

ps -eF | less

ps -eF | meno in una finestra terminale

Le colonne che otteniamo questa volta richiedono che lo schermo sia fatto scorrere lateralmente per rivelarle tutte.

uscita da ps -eF | meno in una finestra terminale, lato sinistro del display

Premendo il tasto “Freccia destra” si sposta il display verso sinistra.

uscita da ps -eF | meno in una finestra terminale, sul lato destro del display

Le colonne che ora otteniamo sono:

  • UID: L'ID utente del proprietario di questo processo.
  • PID: L'ID del processo.
  • PPID: ID processo principale del processo.
  • C: Il numero di bambini presenti nel processo.
  • SZ: Dimensioni nelle pagine RAM dell'immagine di processo.
  • RSS: Dimensioni del set residenti. Questa è la memoria fisica non scambiata utilizzata dal processo.
  • PSR: Il processore a cui è assegnato il processo.
  • STIME: Ora di inizio. Il momento in cui è iniziato il processo.
  • TTY: Il nome della console a cui l'utente ha effettuato l'accesso.
  • TEMPO: La quantità di tempo di elaborazione della CPU utilizzata dal processo.
  • CMD: Il nome del comando che ha avviato il processo.

Elencazione dei processi per ID processo

Una volta trovato l'ID processo per il processo che ti interessa, puoi usarlo con il ps comando per elencare i dettagli di quel processo. Usa il -p (selezionare per ID processo) per raggiungere questo obiettivo:

ps -p 3403

ps -p 3403 in una finestra terminale

I dettagli per questo processo sono elencati:

Uscita di ps -p 3403 in una finestra terminale

Non sei limitato a un ID processo. È possibile fornire un elenco di ID processo, separati da spazi.

Elencazione dei processi per comando

Il -C (comando) consente di cercare un processo usando il nome del comando. Cioè, il nome del comando che ha avviato il processo. Ciò è leggermente diverso dalla riga di comando, che potrebbe includere nomi di percorso, parametri o opzioni.

ps -C shutter

ps -C otturatore in una finestra terminale

Sono elencati i dettagli per il processo dell'otturatore.

Processi di quotazione di proprietà di un utente

Per visualizzare i processi di proprietà di un determinato utente, utilizzare il -u (elenco utenti) opzione:

ps -u mary

ps -u mary in una finestra terminale

Vengono visualizzati i processi di proprietà dell'account utente Mary.

Uscita da ps -u mary in una finestra terminale

Elencazione dei processi per terminale

Per vedere i processi associati a un TTY, utilizzare il -t (seleziona per TTY) opzione. Utilizzato senza un numero TTY, il -t l'opzione riporta i processi associati alla finestra del terminale corrente.

tty
ps -t

ps -t in una finestra terminale

Il tty Il comando segnala che questo è pseudo-teletipo 0. I processi elencati da ps -t sono tutti associati a TTY pts/0.

Se passiamo un numero TTY sulla riga di comando, dovremmo ottenere un rapporto dei processi associati a quel TTY.

ps -t 1

ps -t 1 in una finestra terminale

Questa volta i processi sono tutti associati a TTY pts/1.

RELAZIONATO: Che cos'è un TTY su Linux? (e come usare il comando tty)

Selezione delle colonne da visualizzare

Con il -o (formato) opzione è possibile selezionare da quali colonne si desidera includere nell'output ps. Si specificano le colonne per nome. L'elenco (lungo) dei nomi delle colonne può essere visto nella pagina man nella sezione intitolata “Standard Format Specifiers”. In questo esempio, scegliamo di avere il tempo della CPU (pcpu) e la riga di comando con argomenti (args) incluso nell'output.

ps -e -o pcpu,args | less

ps -e -o pcpu, args | meno in una finestra terminale

L'output include solo le nostre due colonne richieste.

uscita da ps -e -o pcpu, args | meno in una finestra terminale

Ordinamento dell'output per colonne

È possibile ordinare l'output per te usando il --sort opzione. Ordiniamo l'output per colonna della CPU:

ps -e -o pcpu,args --sort -pcpu| less

ps -e -o pcpu, args --sort -pcpu | meno in una finestra terminale

Il trattino “-” sul pcpu Il parametro sort fornisce un ordinamento decrescente.

Uscita da ps ordinata per cpu in una finestra terminale

Per vedere i dieci processi a più alta intensità di CPU, reindirizzare l'output attraverso head comando:

ps -e -o pcpu,args --sort -pcpu | head -10

ps -e -o pcpu, args --sort -pcpu | testa 10 in una finestra terminale

Otteniamo un elenco ordinato e troncato.

output da ps -e -o pcpu, args --sort -pcpu | testa 10 in una finestra terminale

Se aggiungiamo più colonne al nostro display, possiamo ordinare per più colonne. Aggiungiamo il pmem colonna. Questa è la percentuale di memoria del computer utilizzata dal processo. Senza un trattino o con un plus ” +“, L'ordinamento è crescente.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

ps -e -o pcpu, pmem, args --sort -pcpu, pmem | testa 10 in una finestra terminale

Otteniamo la nostra colonna aggiuntiva e la nuova colonna è inclusa nell'ordinamento. La prima colonna viene ordinata prima della seconda colonna e la seconda colonna viene ordinata in ordine crescente perché non è stato inserito un trattino pmem.

Uscita da ps -e -o pcpu, pmem, args --sort -pcpu, pmem | testa 10 in una finestra terminale

Rendiamolo un po 'più utile e aggiungiamo nella colonna ID processo (pid) in modo da poter vedere il numero di processo di ogni processo nel nostro elenco.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

ps -e -o pid, pcpu, pmem, args --sort -pcpu, pmem | testa 10 in una finestra terminale

Ora possiamo identificare i processi.

Uscita da ps -e -o pid, pcpu, pmem, args --sort -pcpu, pmem | testa 10

Processi di uccisione per ID processo

Abbiamo esaminato una serie di modi per identificare i processi, tra cui nome, comando, utente e terminale. Abbiamo anche coperto i modi per identificare i processi in base ai loro attributi dinamici, come l'utilizzo della CPU e la memoria.

Quindi, in un modo o nell'altro, possiamo identificare i processi in esecuzione. Conoscendo il loro ID processo, possiamo (se dobbiamo) uccidere uno di quei processi usando il kill comando. Se volessimo interrompere il processo 898, utilizzeremmo questo formato:

sudo kill 898

sudo kill 898 in una finestra terminale

Se tutto va bene, il processo si chiude silenziosamente.

output di sudo kill 898 in una finestra terminale

RELAZIONATO: Come uccidere i processi dal terminale Linux

Processi di uccisione per nome

Il pkill Il comando consente di terminare i processi per nome. Assicurati di aver identificato il processo corretto! Questo comando interromperà il processo principale.

sudo pkill top

sudo pkill top in una finestra terminale

Ancora una volta, nessuna notizia è una buona notizia. Il processo è terminato in silenzio.

output da sudo pkill top in una finestra terminale

Uccidere più processi per nome

Se hai più copie di un processo in esecuzione o se un processo ha generato una serie di processi figlio (come può fare Google Chrome), come puoi eliminarli? È altrettanto facile. Noi usiamo il killall comando.

Abbiamo due copie dei migliori in esecuzione:

ps -e | grep top

ps -e | grep top in una finestra terminale

Possiamo terminare entrambi con questo comando:

sudo killall top

sudo killall top in una finestra terminale

Nessuna risposta significa nessun problema, quindi entrambi questi processi sono stati interrotti.

output da sudo killall top in una finestra termonale

Ottieni una vista dinamica con la parte superiore

L'output di ps è una vista istantanea. Non si aggiorna. Per ottenere una vista di aggiornamento dei processi, utilizzare il top comando. Fornisce una visione dinamica dei processi in esecuzione sul tuo computer. Il display è diviso in due parti. Nella parte superiore dello schermo è presente una dashboard composta da righe di testo e una tabella nella parte inferiore dello schermo composta da colonne.

Inizio top con questo comando:

top

il comando principale in esecuzione in una finestra del terminale

Le colonne contengono informazioni sui processi:

  • PID: ID processo
  • UTENTE: Nome del proprietario del processo
  • PR: Priorità del processo
  • NI: Il buon valore del processo
  • VIRT: Memoria virtuale utilizzata dal processo
  • RES: Memoria residente utilizzata dal processo
  • SHR: Memoria condivisa utilizzata dal processo
  • S: Stato del processo. Vedi l'elenco sotto dei valori che questo campo può assumere
  • %PROCESSORE: la quota di tempo della CPU utilizzata dal processo dall'ultimo aggiornamento
  • % MEM: condivisione della memoria fisica utilizzata
  • TIME +: tempo totale della CPU utilizzato dall'attività in centesimi di secondo
  • COMANDO: nome comando o riga comandi (parametri nome e riga comandi) Se non è possibile visualizzare la colonna comandi, premere il tasto “Freccia destra”.

Lo stato del processo può essere uno dei seguenti:

  • D: Sonno ininterrotto
  • R: In esecuzione
  • S: Dormire
  • T: Tracciato (interrotto)
  • Z: Zombie

Premere il tasto “Q” per uscire da top.

RELAZIONATO: 37 Comandi Linux importanti che dovresti conoscere

Prima di uccidere un processo

Assicurati che sia quello che stai cercando e controlla che non ti causi problemi. In particolare, vale la pena verificare con -H (gerarchia) e --forest opzioni per assicurarsi che non abbia processi figlio importanti di cui ti sei dimenticato.

Articoli correlati

Ultimi articoli