GNU/Linux >> Linux Esercitazione >  >> Linux

Monitoraggio dei processi su Linux

Introduzione

In questo articolo discuteremo i comandi più comuni con esempi che vengono utilizzati nel monitoraggio dei processi nei sistemi Linux come :

  • ps
  • in alto
  • top
  • lsof

1. ps

Come tutti sappiamo, Linux è un sistema multitasking e multiutente. Quindi, consente a più processi di operare contemporaneamente senza interferire tra loro. Il processo è uno dei concetti fondamentali importanti del sistema operativo Linux. Un processo è un'istanza in esecuzione di un programma e svolge diverse attività all'interno del sistema operativo.

Linux ci fornisce un'utilità chiamata ps per visualizzare le informazioni relative ai processi su un sistema che sta come abbreviazione di "Stato del processo". Il comando ps viene utilizzato per elencare i processi attualmente in esecuzione e i relativi PID insieme ad altre informazioni che dipendono da diverse opzioni. Legge le informazioni sul processo dai file virtuali in /proc file system. /proc contiene file virtuali, questo è il motivo per cui viene definito un file system virtuale.

ps offre numerose opzioni per manipolare l'output in base alle nostre esigenze.

Sintassi :

ps [options]

Opzioni per il comando ps:

1- Selezione del processo semplice:

Mostra i processi per la shell corrente

Il risultato contiene quattro colonne di informazioni.
In cui si,
PID – l'ID processo univoco
TTY – tipo di terminale a cui l'utente ha effettuato l'accesso
TEMPO – quantità di CPU in minuti e secondi di esecuzione del processo
CMD – nome del comando che ha avviato il processo.

Nota – A volte quando eseguiamo ps comando, mostra ORA come 00:00:00. Non è altro che il tempo totale di utilizzo della CPU accumulato per qualsiasi processo e 00:00:00 indica che il kernel non ha fornito tempo di CPU fino ad ora. Nell'esempio precedente abbiamo scoperto che, per bash, non è stato assegnato alcun tempo di CPU. Questo perché bash è solo un processo padre per diversi processi che necessitano di bash per la loro esecuzione e bash stesso non utilizza tempo di CPU fino ad ora.

2. Visualizza processi :

Visualizza tutti i processi in esecuzione, utilizza una delle seguenti opzioni con ps –

# ps -A
# ps -e
3. Visualizza processi non associati a un terminale :

Visualizza tutti i processi tranne sia i leader di sessione che i processi non associati a un terminale.

# ps -a

Nota – Potresti pensare che cos'è il leader di sessione? Una sessione univoca viene assegnata a ogni gruppo di processi. Quindi, il leader di sessione è un processo che dà il via ad altri processi. L'ID di processo del primo processo di qualsiasi sessione è simile all'ID di sessione.

4. Visualizza tutti i processi tranne i leader di sessione:
# ps -d

5. Visualizza tutti i processi tranne quelli che soddisfano le condizioni specificate (nega la selezione) :
Esempio – Se vuoi vedere solo il leader di sessione e i processi non associati a un terminale. Quindi, esegui

# ps -a -N
or
# ps -a --deselect

6. Visualizza tutti i processi associati a questo terminale :

# ps -T

7. Visualizza tutti i processi in esecuzione :

# ps -r

8. Visualizza tutti i processi di tua proprietà : Processi ovvero lo stesso EUID di ps che significa corridore del comando ps, root in questo caso

# ps -x

Selezione del processo per elenco

Qui discuteremo come ottenere l'elenco dei processi specifici con l'aiuto del comando ps. Queste opzioni accettano un singolo argomento sotto forma di un elenco separato da spazi vuoti o da virgole. Possono essere utilizzati più volte.
Ad esempio: ps -p “1 2” -p 3,4

  1. Seleziona il processo in base al nome del comando. Questo seleziona i processi il cui nome eseguibile è fornito in cmdlist. Potrebbe esserci la possibilità che tu non conosca l'ID del processo e con questo comando è più facile cercare.

Sintassi : ps -C nome_comando

Esempio :

[root@unixcop ~]# ps -C dhclient
  PID TTY          TIME CMD
19815 ?        00:00:00 dhclient

2. Selezionare per ID o nome del gruppo. L'ID gruppo identifica il gruppo dell'utente che ha creato il processo.

Syntax : ps -G group_name
         ps --Group group_name

Example :
[root@unixcop ~]# ps -G root

3. Visualizza per ID gruppo :

Syntax : ps -g group_id
              ps -group group_id

Ora esempio :

# ps -g 1

4. Visualizza il processo per ID processo.

-Syntax :
ps p process_id
ps -p process_id
ps --pid process_id

Ed esempi:

[root@unixcop ~]#  ps p 27223
  PID TTY      STAT   TIME COMMAND
27223 ?        Ss     0:01 sshd: root@pts/2

[root@unixcop ~]#  ps -p 27223
  PID TTY          TIME CMD
27223 ?        00:00:01 sshd

[root@unixcop ~]#  ps --pid 27223
  PID TTY          TIME CMD
27223 ?        00:00:01 sshd

È possibile visualizzare più processi specificando più ID processo separati da spazi vuoti o virgole –
Per Esempio :

[root@unixcop ~]#  ps -p 1 904 27223
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:13 /usr/lib/systemd/systemd --switched-root --system --d
  904 tty1     Ssl+   1:02 /usr/bin/X -core -noreset :0 -seat seat0 -auth /var/r
27223 ?        Ss     0:01 sshd: root@pts/2

Qui abbiamo menzionato tre ID di processo:1, 904 e 27223 separati da uno spazio vuoto.

5. Selezionare per ID processo padre. Utilizzando questo comando possiamo visualizzare tutti i processi di proprietà del processo padre eccetto il processo padre.

Esempi :

[root@unixcop ~]# ps -p 766
  PID TTY          TIME CMD
  766 ?        00:00:06 NetworkManager

[root@unixcop ~]# ps --ppid 766
  PID TTY          TIME CMD
19815 ?        00:00:00 dhclient

Nell'esempio sopra ID processo 766 è assegnato a NetworkManager e questo è il processo padre per dhclient con ID processo 19815.

6. Visualizza tutti i processi appartenenti a qualsiasi ID di sessione.

Syntax :
ps -s session_id
ps --sid session_id

Example :
[root@unixcop ~]# ps -s 1248
  PID TTY          TIME CMD
 1248 ?        00:00:00 dbus-daemon
 1276 ?        00:00:00 dconf-service
 1302 ?        00:00:00 gvfsd
 1310 ?        00:00:00 gvfsd-fuse
 1369 ?        00:00:00 gvfs-udisks2-vo
 1400 ?        00:00:00 gvfsd-trash
 1418 ?        00:00:00 gvfs-mtp-volume
 1432 ?        00:00:00 gvfs-gphoto2-vo
 1437 ?        00:00:00 gvfs-afc-volume
 1447 ?        00:00:00 wnck-applet
 1453 ?        00:00:00 notification-ar
 1454 ?        00:00:02 clock-applet

7. Seleziona per tty. Questo seleziona i processi associati al menzionato tty :

The Syntax :
ps t tty
ps -t tty
ps --tty tty

Ad esempio :

# ps -t pts/0

8. Selezionare in base all'ID utente o al nome effettivo.

E la sintassi è :
ps U nome_utente/ID

ps -U nome_utente/ID

Controllo del formato di output

Queste opzioni vengono utilizzate per scegliere le informazioni visualizzate da ps. Ci sono più opzioni per controllare il formato di output. Queste opzioni possono essere combinate con qualsiasi altra opzione come e, u, p, G, g ecc, dipende dalle nostre necessità.

1. Usa -f per visualizzare l'elenco in formato completo.

ps -af

2. Usa -F per visualizzare Formato extra completo.

ps -F

3. Per visualizzare il processo in base al formato definito dall'utente.

#  ps --formate column_name
#  ps -o column_name
#  ps o column_name

Esempio :

ps -aN --format cmd,pid,user,ppid

In questo esempio desidero vedere comando, ID processo, nome utente e ID processo padre, quindi passo rispettivamente gli argomenti cmd, pid, user e ppid.

4. Visualizza nel formato di controllo dei lavori BSD:

ps -j

5. Visualizza il formato lungo BSD:

ps l

6. Aggiungi una colonna di dati di sicurezza.

ps -aM

7. Visualizza comando con formato segnale.

[root@unixcop ~]# ps s 766

8. Visualizza il formato orientato all'utente

ps u 1

9. Visualizza il formato della memoria virtuale

ps v 1

10. Se vuoi vedere l'ambiente di qualsiasi comando. Quindi usa l'opzione **e** –

[root@unixcop ~]# ps ev 766
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
  766 ?        Ssl    0:08     47  2441 545694 10448  1.0 /usr/sbin/NetworkManager --no-daemon LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

11. Visualizza i processi che utilizzano la memoria più alta.

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem

12. stampa un albero di processo

[root@unixcop ~]# ps --forest -C sshd
  PID TTY          TIME CMD
  797 ?        00:00:00 sshd
11680 ?        00:00:03  \_ sshd
16361 ?        00:00:02  \_ sshd

13. Elenca tutti i thread per un particolare processo. Usa -T o -L opzione per visualizzare i thread di un processo.

[root@unixcop ~]# ps -C sshd -L
  PID   LWP TTY          TIME CMD
  797   797 ?        00:00:00 sshd
11680 11680 ?        00:00:03 sshd
16361 16361 ?        00:00:02 sshd

Nota – Per la spiegazione dei diversi contenuti delle colonne, fare riferimento alla pagina man.

Riferimento : Pagina man

2. in alto

in alto comando viene utilizzato per mostrare i processi Linux. Fornisce una visualizzazione dinamica in tempo reale del sistema in esecuzione. Solitamente, questo comando mostra le informazioni di riepilogo del sistema e l'elenco dei processi o thread che sono attualmente gestiti dal kernel Linux.
Non appena eseguirai questo comando, si aprirà una modalità di comando interattiva in cui la metà superiore conterrà le statistiche dei processi e dell'utilizzo delle risorse. E la metà inferiore contiene un elenco dei processi attualmente in esecuzione. Premendo q uscirà semplicemente dalla modalità di comando.

Sintassi :

top

Qui,

  • PID: Mostra l'ID processo univoco dell'attività.
  • PR: Indica la priorità del compito.
  • SHR: Rappresenta la quantità di memoria condivisa utilizzata da un'attività.
  • VIRT: Memoria virtuale totale utilizzata dall'attività.
  • UTENTE: Nome utente del proprietario dell'attività.
  • %CPU: Rappresenta l'utilizzo della CPU.
  • TEMPO+: Tempo CPU, lo stesso di "TIME", ma riflette una maggiore granularità attraverso i centesimi di secondo.
  • SHR: Rappresenta la dimensione della memoria condivisa (kb) utilizzata da un'attività.
  • NI: Rappresenta un bel valore di attività. Un valore Nice negativo implica una priorità più alta e un valore Nice positivo significa una priorità inferiore.
  • %MEM: Mostra l'utilizzo della memoria dell'attività.

Esempi:

1) Esci dal comando superiore dopo una specifica ripetizione: L'output superiore continua ad aggiornare finché non premi "q". Con il comando in basso il comando in alto uscirà automaticamente dopo 20 ripetizioni.

top -n 10

2) Visualizza il processo utente specifico

top -u unixcop

qui l'utente ha chiamato unixcop

3) Evidenzia Processo in esecuzione in alto: Premi 'z' l'opzione in esecuzione del comando superiore visualizzerà il processo in esecuzione a colori che potrebbe aiutarti a identificare facilmente il processo in esecuzione

4) Mostra il percorso assoluto dei processi:

Premi 'c' opzione nell'esecuzione del comando top, visualizzerà il percorso assoluto di esecuzione di pro

5) Termina il processo in esecuzione: Puoi terminare un processo dopo aver trovato il PID del processo premendo 'k' opzione nell'esecuzione del comando top senza uscire dalla finestra in alto come mostrato di seguito.

6) Ordina per Utilizzo CPU: Premi (Maiusc+P) per ordinare i processi in base all'utilizzo della CPU.

7) Mostra la sintassi dei comandi in alto:

top -h 

8) Modalità batch: Invia l'output dall'alto a un file o a qualsiasi altro programma.

top -b

9) Modalità sicura: Usa la parte superiore in modalità protetta.

top -s

10) Riga di comando: Il comando seguente inizia in alto con l'ultimo stato chiuso.

Top -c

11) Tempo di ritardo: Indica il tempo di ritardo tra gli aggiornamenti dello schermo.

top -d seconds.tenths

3. htop

top command nel sistema Linux è un'utilità della riga di comando che consente all'utente di monitorare in modo interattivo le risorse vitali del sistema o i processi del server in tempo reale. top è un programma più recente rispetto a top comando e offre molti miglioramenti rispetto al comando superiore. htop supporta il funzionamento del mouse, utilizza il colore nel suo output e fornisce indicazioni visive sull'utilizzo del processore, della memoria e dello scambio. htop stampa anche le righe di comando complete per i processi e consente di scorrere sia verticalmente che orizzontalmente rispettivamente per i processi e le righe di comando.

Sintassi:

htop [-dChusv]

Esempio:

Opzioni:

  • -d –ritardo : Utilizzato per mostrare il ritardo tra gli aggiornamenti, in decimi di secondo.
  • -C –nessun colore –nessun colore :Avvia htop in modalità monocromatica.
  • -h –aiuto : Utilizzato per visualizzare il messaggio di aiuto ed uscire.
  • -u –user=USERNAME : Utilizzato per mostrare solo i processi di un determinato utente.
htop -u qadry
  • -p –pid=PID, PID… : Utilizzato per mostrare solo i PID forniti.
  • -s –sort-key COLUMN : Ordina per questa colonna (usa la guida –sort-key per un elenco di colonne).
  • -V –versione : Genera informazioni sulla versione ed esci.

Comandi interattivi:

  • Frecce, Pagina su, Pagina giù, Home, Fine :Scorri l'elenco dei processi.
  • Spazio :tagga o annulla il tag di un processo.
  • U – Deseleziona tutti i processi (rimuovi tutti i tag aggiunti con la barra spaziatrice).
  • s – Traccia le chiamate di sistema del processo.
  • F1 – Aiuto
  • F2 – configurazione
  • F3 – cerca
  • F4 – filtering:digita una parte della riga di comando di un processo e verranno mostrati solo i processi i cui nomi corrispondono.
  • F5 – Vista ad albero.
  • F6 – Ordinamento.
  • F7 – Aumenta la priorità del processo selezionato. Questo può essere fatto solo dal superutente.
  • F8 – Diminuisci la priorità del processo selezionato.
  • F9 – Termina il processo.
  • F10 – Esci.

4. ls di

Linux/Unix considera tutto come file e mantiene la cartella. Quindi "File o un file" è molto importante in Linux/Unix. Mentre si lavora nel sistema Linux/Unix potrebbero esserci diversi file e cartelle che vengono utilizzati, alcuni di essi sarebbero visibili e altri no.
lsof comando sta per Elenco di file aperti . Questo comando fornisce un elenco di file aperti. Fondamentalmente, fornisce le informazioni per scoprire i file che vengono aperti da quale processo. Con una volta elenca tutti i file aperti nella console di output. Non può solo elencare file regolari comuni, ma può elencare una directory, un file speciale di blocco, una libreria condivisa, un file speciale di caratteri, una pipe normale, una named pipe, un socket Internet, un socket di dominio UNIX e molti altri. può essere combinato con il comando grep può essere utilizzato per eseguire ricerche e elenchi avanzati.

Sintassi:

lsof [option][user name]

Opzioni con esempi:

  • Elenca tutti i file aperti: Questo comando elenca tutti i file che vengono aperti da qualsiasi processo nel sistema.
lsof

Qui si osserva che ci sono i dettagli dei file che vengono aperti. Process Id, l'utente associato al processo, FD(file descriptor), dimensione del file insieme fornisce informazioni dettagliate sul file aperto dal comando, ID processo, utente, la sua dimensione ecc.

  • FD rappresenta come descrittore di file.
  • cwd :Directory di lavoro corrente.
  • txt :File di testo.
  • mem :File di memoria.
  • mmap :dispositivo mappato in memoria.
  • Elenca tutti i file aperti da un utente: Esistono diversi utenti di un sistema e ogni utente ha requisiti diversi e di conseguenza utilizza file e dispositivi. Per trovare un elenco di file aperti da un utente specifico questo comando è utile.

Sintassi:

lsof -u username

Esempio :

lsof -u qadry

Nella figura sopra riportata con il comando lsof -u qadry elenca tutti i file aperti dall'utente. Insieme a ciò possiamo vedere il tipo di file qui e sono:

  • DIR: Directory
  • REG: File normale
  • CR: File speciale di caratteri
  • Elenca tutti i file aperti da tutti tranne che da un utente specifico: Con l'aiuto di questo comando puoi elencare tutti i file aperti da tutto il processo e da tutto l'utente. Ma quando vogliamo trovare l'elenco dei file che vengono aperti da tutti gli utenti tranne un utente particolare, possiamo usare:

Sintassi:

lsof -u ^root

Nella figura data possiamo osservare che non ci sono file aperti dall'utente root.

  • Elenca tutti i file aperti da un particolare Processo: Questo comando può elencare tutti i file aperti da un particolare processo. -c seguito dai nomi dei processi può scoprire tutti i file che vengono aperti da quel particolare processo che è nominato nel comando.
Sintassi:
lsof -c crond

Qui puoi osservare che i file e la loro descrizione sono aperti dal processo crond.

  • Elenca tutti i file aperti che vengono aperti da un particolare processo: Ogni file è associato a un ID processo. Possono esserci molti file che vengono aperti da un particolare processo. Usando lsof -p process ID, è possibile controllare i file aperti da un particolare processo.

Sintassi:

lsof -p process ID

Esempio :

lsof -p 2781
  • File aperti da tutti gli altri PID: Poiché il comando figura sopra indicato elenca i file aperti da un particolare ID processo. Allo stesso modo, puoi utilizzare l'opzione di comando seguente per scoprire l'elenco dei file che non vengono aperti da un particolare ID processo.
Sintassi:
lsof -p ^process ID
  • Elenca gli ID processo principali: C'è un gran numero di processi in esecuzione in un sistema e hanno file aperti per il suo utilizzo. Possono esserci molti processi figlio di un processo e questo processo può anche essere definito processo padre. Per scoprire l'elenco dei file aperti dal processo padre Id il comando lsof viene utilizzato con l'opzione -R .

Sintassi:

lsof -R
  • File aperti da una directory: Elenca i file che vengono aperti da una directory particolare. Ci sono file così come la directory in un sistema. Quindi possono esserci diversi file aperti da una directory oltre al file normale.

Sintassi:

lsof -D directory path
  • File aperti dalle connessioni di rete: Il nostro PC/sistema può essere collegato attraverso varie reti che aiutano in una varietà di scopi. Come sappiamo che in Linux tutto è un file, quindi possiamo anche controllare i file che vengono aperti da alcune connessioni di rete nel sistema.

Sintassi:

lsof -i

Esempio:

lsof -i tcp

Qui in figura possiamo vedere i file aperti dalla rete TCP. Allo stesso modo, possiamo verificare la presenza di UDP ecc.

Nota: Per saperne di più in dettaglio sul comando lsof puoi vedere la pagina di manuale come segue:

 man lsof

Linux
  1. Linux – Init Process:antenato di tutti i processi?

  2. comando Linux ps

  3. Processi UNIX / Linux:funzione C fork()

  4. Gestire i processi in Ubuntu Linux

  5. Linux:trova e uccidi i processi di zombi

30 esempi di comandi principali per il monitoraggio in Linux

Come uccidere i processi Zombie in Linux

Processi in esecuzione

Comprensione dei processi su Linux

Comandi per la gestione dei processi in Linux

Come inviare processi in background su Linux