GNU/Linux >> Tutoriales Linux >  >> Linux

UNIX/Linux:7 ejemplos prácticos de comandos PS para el monitoreo de procesos

El proceso es una instancia en ejecución de un programa. Linux es un sistema operativo multitarea, lo que significa que más de un proceso puede estar activo a la vez. Utilice el comando ps para averiguar qué procesos se están ejecutando en su sistema.

Este artículo explica 7 usos prácticos del comando ps y sus opciones.

Para monitorear y controlar los procesos, Linux proporciona muchos comandos como ps, kill, killall, nice, renice y top.

1. Lista de procesos actualmente en ejecución (ps -ef, ps -aux)

Es un ejemplo de uso común con un comando ps para enumerar todos los procesos que se están ejecutando actualmente en una máquina. El siguiente ejemplo muestra las opciones del comando ps para obtener todos los procesos.

$ 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

donde:

  • -e para mostrar todos los procesos.
  • -f para mostrar la lista de formato completo.

En el caso de las máquinas BSD, puede usar 'ps -aux' para obtener detalles sobre todo el proceso como se muestra arriba.

$ ps -aux

2. Enumere el proceso según el UID y los comandos (ps -u, ps -C)

Use la opción -u para mostrar el proceso que pertenece a un nombre de usuario específico. Cuando tenga varios nombres de usuario, sepárelos con una coma. El siguiente ejemplo muestra todos los procesos que son propiedad del usuario 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

A menudo, ps se usa con grep como “ps -aux | comando grep” para obtener la lista de procesos con el comando dado.

Pero el comando ps en sí tiene una opción para lograr lo mismo. El siguiente ejemplo muestra que todos los procesos que tienen tatad.pl en su ejecución de comandos.

$ 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: Podemos crear alias para el comando ps para listar procesos basados ​​en comandos, usuarios o grupos.

3. Enumere los procesos basados ​​en PID o PPID (ps -p, ps –ppid)

A cada proceso se le asignará una ID de proceso (PID) única.

Cuando inicia alguna aplicación, puede bifurcar una cantidad de procesos y cada subproceso tendrá su propio PID. Por lo tanto, cada proceso tendrá su propia identificación de proceso y su propia identificación de proceso principal.

Para todos los procesos que un proceso bifurca tendrán el mismo PPID (identificador de proceso principal). El siguiente método se utiliza para obtener una lista de procesos con un PPID particular.

$ 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

El siguiente ejemplo es para listar los procesos que han dado 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. Listar Procesos en una Jerarquía (ps –forest)

El siguiente ejemplo muestra el Id. del proceso y los comandos en una jerarquía. –forest es un argumento para el comando ps que muestra el arte ASCII del árbol de procesos. A partir de este árbol, podemos identificar cuál es el proceso padre y el hijo lo procesa bifurcado de manera recursiva.

$ 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: También puede usar los comandos tree y pstree para mostrar el proceso en una bonita estructura de árbol.

5. Muestra el tiempo de pared transcurrido para los procesos (ps -o pid,etime=)

Si desea obtener el tiempo transcurrido para los procesos que se están ejecutando actualmente, el comando ps proporciona etime, que proporciona el tiempo transcurrido desde que se inició el proceso, en la forma [[dd-]hh:]mm:ss.

El siguiente comando muestra el tiempo transcurrido para los ID de proceso 1 (init) y el ID de proceso 29675.

Por ejemplo, "10-22:13:29" en la salida representa el proceso que se está ejecutando durante 10 días, 22 horas, 13 minutos y 29 segundos. Dado que el proceso de inicio comienza durante el inicio del sistema, esta vez será la misma que la salida del comando 'uptime'.

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

6. Listar todos los subprocesos para un proceso en particular (ps -L)

Puede obtener una lista de subprocesos para los procesos. Cuando un proceso se bloquea, es posible que necesitemos identificar la lista de subprocesos que se ejecutan para un proceso en particular, como se muestra a continuación.

 $ 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

La opción -L se usa para mostrar la lista de subprocesos para un proceso que tiene el comando dado. Y también muestra nlwp, que representa el número de procesos ligeros. En el ejemplo anterior, se están ejecutando un total de 15 subprocesos Java.

7. Búsqueda de fugas de memoria (ps –sort pmem)

Una fuga de memoria, técnicamente, es un uso cada vez mayor de la memoria por parte de una aplicación.

Con las aplicaciones de escritorio comunes, esto puede pasar desapercibido, porque un proceso generalmente libera la memoria que ha usado cuando cierra la aplicación.

Sin embargo, en el modelo cliente/servidor, la fuga de memoria es un problema grave, ya que se espera que las aplicaciones estén disponibles las 24 horas del día, los 7 días de la semana. Las aplicaciones no deben continuar aumentando su uso de memoria indefinidamente, ya que esto puede causar problemas graves. Para monitorear tales pérdidas de memoria, podemos usar los siguientes comandos.

$ 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

En el comando ps anterior, la opción –sort genera el %MEM más alto en la parte inferior. Simplemente anote el PID para el mayor uso de %MEM. Luego use el comando ps para ver todos los detalles sobre esta identificación de proceso y monitorear el cambio a lo largo del tiempo. Tenías que repetirlo manualmente o ponerlo como cron en un archivo.

$ 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: En el resultado anterior, si RSS (tamaño del conjunto residente, en KB) aumenta con el tiempo (también lo haría %MEM), puede indicar una pérdida de memoria en la aplicación.

Artículos anteriores de la serie de supervisión y ajuste del rendimiento de Linux:

  • 10 ejemplos útiles de Sar (Sysstat) para la supervisión del rendimiento de UNIX/Linux
  • Introducción a la supervisión y ajuste del rendimiento de Linux
  • 15 ejemplos prácticos de comandos superiores de Linux

Linux
  1. 8 ejemplos prácticos del comando Linux Xargs para principiantes

  2. Comando cp en Linux:7 ejemplos prácticos

  3. Comando de apagado de Linux:5 ejemplos prácticos

  4. 5 ejemplos prácticos del comando dd en Linux

  5. UNIX/Linux:10 ejemplos de comandos de Netstat

12 ejemplos prácticos de In Command en Linux

15 ejemplos prácticos del comando Rsync en Linux

5 ejemplos prácticos de Tail Command en Linux

Comando echo en Linux:7 ejemplos prácticos

Ejemplos prácticos de comando ping en Linux

15 ejemplos prácticos de comandos Grep en Linux / UNIX