GNU/Linux >> Linux Esercitazione >  >> Linux

UNIX / Linux:7 esempi pratici di comandi PS per il monitoraggio dei processi

Process è un'istanza in esecuzione di un programma. Linux è un sistema operativo multitasking, il che significa che più di un processo può essere attivo contemporaneamente. Usa il comando ps per scoprire quali processi sono in esecuzione sul tuo sistema.

Questo articolo spiega 7 usi pratici del comando ps e delle sue opzioni.

Per monitorare e controllare i processi, Linux fornisce molti comandi come ps, kill, killall, nice, renice e top.

1. Elenca i processi attualmente in esecuzione (ps -ef, ps -aux)

È un esempio comunemente usato con un comando ps per elencare tutti i processi attualmente in esecuzione in una macchina. L'esempio seguente mostra le opzioni del comando ps per ottenere tutti i processi.

$ ps -ef
root     26551     5  0 Feb10 ?        00:03:41 [pdflush]
root     26570     5  0 Feb10 ?        00:00:20 [pdflush]
root     30344  3382  0 Feb21 ?        00:00:11 sshd: root@pts/14
root     30365 30344  0 Feb21 pts/14   00:00:02 -bash
root     30393  3382  0 Feb21 ?        00:00:10 sshd: root@pts/15

Dove:

  • -e per visualizzare tutti i processi.
  • -f per visualizzare l'elenco in formato completo.

In caso di macchine BSD, puoi usare "ps -aux" per fornire i dettagli su tutto il processo come mostrato sopra.

$ ps -aux

2. Elenca il processo in base all'UID e ai comandi (ps -u, ps -C)

Utilizzare l'opzione -u per visualizzare il processo che appartiene a un nome utente specifico. Quando hai più nomi utente, separali usando una virgola. L'esempio seguente mostra tutti i processi di proprietà dell'utente wwwrun o postfix.

$ ps -f -u wwwrun,postfix
UID        PID  PPID  C STIME TTY          TIME CMD
postfix   7457  7435  0 Mar09 ?        00:00:00 qmgr -l -t fifo -u
wwwrun    7495  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7496  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7497  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7498  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun    7499  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   10078  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   10082  7491  0 Mar09 ?        00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
postfix  15677  7435  0 22:23 ?        00:00:00 pickup -l -t fifo -u

Spesso ps è usato con grep come “ps -aux | grep command” per ottenere l'elenco dei processi con il comando dato.

Ma il comando ps stesso ha un'opzione per ottenere lo stesso. L'esempio seguente mostra che tutti i processi che ha tatad.pl nella sua esecuzione del comando.

$ ps -f -C tatad.pl
UID        PID  PPID  C STIME TTY          TIME CMD
root      9576     1  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9577  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9579  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9580  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9581  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9582  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root     12133  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl

Nota: Possiamo creare alias per il comando ps per elencare i processi in base a comandi, utenti o gruppi.

3. Elenca i processi basati su PID o PPID (ps -p, ps –ppid)

A ogni processo verrà assegnato il Process ID (PID) univoco.

Quando avvii un'applicazione, potrebbe biforcare il numero di processi e ogni processo secondario avrà il proprio PID. Quindi, ogni processo avrà il proprio ID processo e il proprio processo padre.

Per tutti i processi che un processo fork avrà lo stesso PPID (identificatore del processo padre). Il metodo seguente viene utilizzato per ottenere un elenco di processi con un particolare PPID.

$ ps -f --ppid 9576
UID        PID  PPID  C STIME TTY          TIME CMD
root      9577  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9579  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9580  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9581  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root      9582  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
root     12133  9576  0 Mar09 ?        00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl

L'esempio seguente elenca i processi che hanno fornito il PID.

$ ps -f  -p 25009,7258,2426
UID        PID  PPID  C STIME TTY          TIME CMD
root      2426     4  0 Mar09 ?        00:00:00 [reiserfs/0]
root      7258     1  0 Mar09 ?        00:00:00 /usr/sbin/nscd
postfix  25009  7435  0 00:02 ?        00:00:00 pickup -l -t fifo -u

4. Elenca i processi in una gerarchia (ps –forest)

L'esempio seguente mostra l'ID di processo e i comandi in una gerarchia. –forest è un argomento del comando ps che mostra la grafica ASCII dell'albero dei processi. Da questo albero, possiamo identificare qual è il processo padre e il processo figlio che ha biforcato in modo ricorsivo.

$ ps -e -o pid,args --forest
  468  \_ sshd: root@pts/7
  514  |   \_ -bash
17484  \_ sshd: root@pts/11
17513  |   \_ -bash
24004  |       \_ vi ./790310__11117/journal
15513  \_ sshd: root@pts/1
15522  |   \_ -bash
 4280  \_ sshd: root@pts/5
 4302  |   \_ -bash

Nota: Puoi anche usare il comando tree e pstree per visualizzare il processo in una bella struttura ad albero.

5. Elenca il tempo trascorso sul muro per i processi (ps -o pid,etime=)

Se si desidera ottenere il tempo trascorso per i processi attualmente in esecuzione, il comando ps fornisce etime che fornisce il tempo trascorso dall'avvio del processo, nella forma [[dd-]hh:]mm:ss.

Il comando seguente mostra il tempo trascorso per gli ID processo 1 (init) e l'ID processo 29675.

Ad esempio, "10-22:13:29" nell'output rappresenta il processo init in esecuzione per 10 giorni, 22 ore, 13 minuti e 29 secondi. Poiché il processo di inizializzazione viene avviato durante l'avvio del sistema, questa volta sarà uguale all'output del comando 'uptime'.

# ps -p 1,29675 -o pid,etime=
  PID
    1 10-22:13:29
29675  1-02:58:46

6. Elenca tutti i thread per un particolare processo (ps -L)

È possibile ottenere un elenco di thread per i processi. Quando un processo si blocca, potrebbe essere necessario identificare l'elenco di thread in esecuzione per un particolare processo come mostrato di seguito.

 $ ps -C java -L -o pid,tid,pcpu,state,nlwp,args
  PID   TID %CPU S NLWP COMMAND
16992 16992  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16993  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16994  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16995  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16996  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16997  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16998  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 16999  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17000  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17001  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17002  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17003  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 17024  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 15753  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
16992 15754  0.0 S   15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006

L'opzione -L viene utilizzata per visualizzare l'elenco dei thread per un processo a cui è stato dato il comando. E mostra anche nlwp, che rappresenta il numero di processi leggeri. Nell'esempio sopra, sono in esecuzione un totale di 15 thread java.

7. Trovare perdita di memoria (ps –sort pmem)

Una perdita di memoria, tecnicamente, è un utilizzo sempre crescente della memoria da parte di un'applicazione.

Con le comuni applicazioni desktop, questo può passare inosservato, perché un processo in genere libera tutta la memoria che ha utilizzato quando chiudi l'applicazione.

Tuttavia, nel modello client/server, la perdita di memoria è un problema serio, perché le applicazioni dovrebbero essere disponibili 24 ore su 24, 7 giorni su 7. Le applicazioni non devono continuare ad aumentare l'utilizzo della memoria indefinitamente, poiché ciò può causare seri problemi. Per monitorare tali perdite di memoria, possiamo utilizzare i seguenti comandi.

$ ps aux --sort pmem

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  1520  508 ?        S     2005   1:27 init
inst  1309  0.0  0.4 344308 33048 ?      S     2005   1:55 agnt (idle)
inst  2919  0.0  0.4 345580 37368 ?      S     2005  20:02 agnt (idle)
inst 24594  0.0  0.4 345068 36960 ?      S     2005  15:45 agnt (idle)
root 27645  0.0 14.4 1231288 1183976 ?   S     2005   3:01 /TaskServer/bin/./wrapper-linux-x86-32

Nel comando ps sopra, l'opzione –sort restituisce la %MEM più alta in basso. Basta annotare il PID per l'utilizzo %MEM più alto. Quindi usa il comando ps per visualizzare tutti i dettagli su questo ID processo e monitorare la modifica nel tempo. Dovevi ripetere manualmente ir o inserirlo come cron in un file.

$ ps ev --pid=27645
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
27645 ? S 3:01 0 25 1231262 1183976 14.4 /TaskServer/bin/./wrapper-linux-x86-32

$ ps ev --pid=27645
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
27645 ? S 3:01 0 25 1231262 1183976 14.4 /TaskServer/bin/./wrapper-linux-x86-32

Nota: Nell'output sopra, se RSS (dimensione del set residente, in KB) aumenta nel tempo (così come %MEM), potrebbe indicare una perdita di memoria nell'applicazione.

Articoli precedenti nella serie sul monitoraggio e l'ottimizzazione delle prestazioni di Linux:

  • 10 utili esempi Sar (Sysstat) per il monitoraggio delle prestazioni UNIX/Linux
  • Introduzione al monitoraggio delle prestazioni e all'ottimizzazione di Linux
  • 15 Esempi pratici di comandi principali di Linux

Linux
  1. 8 esempi pratici del comando Xargs di Linux per principianti

  2. Comando cp in Linux:7 esempi pratici

  3. Comando di arresto di Linux:5 esempi pratici

  4. 5 Esempi pratici del comando dd in Linux

  5. UNIX / Linux:10 esempi di comandi Netstat

12 Esempi pratici di In Command in Linux

15 esempi pratici di comando Rsync in Linux

5 esempi pratici di Tail Command in Linux

echo Command in Linux:7 esempi pratici

Pratico comando Ping negli esempi di Linux

15 Esempi pratici di comandi Grep in Linux / UNIX