El comando ps permite ver la lista de procesos del sistema: presenta una imagen simplificada de las estructuras del núcleo que administran los procesos. Extrae toda la información del pseudosistema de archivos /proc en el que el núcleo coloca toda la información respecto al estado del sistema en curso de ejecución.
De modo predeterminado, este comando muestra únicamente los procesos iniciados por el usuario desde el terminal; por ejemplo:
PID TTY TIME CMD 1200 pts0 00:00:00 bash 1239 pts0 00:00:00 ps
Este comando cuenta con muchas opciones. Además, acepta opciones de Unix98 (con - ), BSD (sin -) y GNU (formato largo con --). Veamos un ejemplo:
[nicolas]$ ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group
name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports
names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols -- ppid
-j,j job control s signal --group --user --sid --rows -- info
-O,O preloaded -o v virtual memory --cumulative --format -- deselect
-l,l long u user-oriented --sort --tty --forest --version -F extra full X registers --heading --no-heading --
context
********* misc options *********
-V,V show version L list format codes f ASCII art forest -m,m,-L,-T,H threads S children in sum -y change -l format -M,Z security data c true command name -c scheduling class -w,w wide output n numeric WCHAN,UID -H process hierarchy Es casi imposible recordar todas las opciones del comando ps, y algunas de ellas, según si son de origen Unix98 o BSD (con o sin -), no dan el mismo resultado. Así, la opción -
e presenta todos los procesos, mientras que e muestra el entorno de los procesos en la
lista.
La versión española de la página del manual puede ser obsoleta y no presentar todas las opciones del comando. Para ver las páginas del manual en lenguaje internacional (ANSI C) a pesar de haberse instalado la distribución en español, basta con modificar la
variable de entorno $LANG escribiendo LANG=C en el shell (véase el capítulo Shell Bash).
Veamos, al menos, dos sintaxis utilizadas frecuentemente:
ps aux
Muestra los procesos de todos los usuarios (a) y los que no están vinculados a un terminal (x), especificando el nombre del usuario y la fecha de inicio (u).
ps -ef
Muestra todos los procesos (-e) y mucha información (-f). Por ejemplo:
[nicolas]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.8 0.4 1584 F520 ? S 13:31 0:03 init [3] root 2 0.0 0.0 0 0 ? SWN 13:31 0:00 [ksoftirqd/0] root 3 0.0 0.0 0 0 ? SW 13:31 0:00 [events/0] root 4 0.0 0.0 0 0 ? SW 13:31 0:00 [kblockd/0] root 5 0.0 0.0 0 0 ? SW 13:31 0:00 [kapmd] root 6 0.0 0.0 0 0 ? SW 13:31 0:00 [pdflush] root 7 0.0 0.0 0 0 ? SW 13:31 0:00 [pdflush] root 8 0.0 0.0 0 0 ? SW 13:31 0:00 [kswapd0] root 9 0.0 0.0 0 0 ? SW 13:31 0:00 [aio/0] root 11 0.0 0.0 0 0 ? SW 13:31 0:00 [kseriod] root 15 0.0 0.0 0 0 ? SW 13:31 0:00 [kjournald] root 121 0.0 0.8 2036 132 ? S 13:31 0:00 devfsd /dev root 211 0.0 0.0 0 0 ? SW 13:31 0:00 [khubd] root 346 0.0 0.0 0 0 ? SW 13:31 0:00 [kjournald] root 786 0.0 0.4 1640 604 ? S 13:32 0:00 syslogd -m 0 -a / root 794 0.1 1.2 2592 1532 ? S 13:32 0:00 klogd -2 root 912 0.0 1.1 3152 1420 ? S 13:32 0:00 /usr/sbin/sshd root 1145 0.0 0.4 1624 616 ? S 13:32 0:00 crond root 1191 0.0 0.3 1568 444 tty1 S 13:32 0:00 /sbin/mingetty tt root 1192 0.0 0.3 1568 444 tty2 S 13:32 0:00 /sbin/mingetty tt root 1193 0.0 0.3 1568 444 tty3 S 13:32 0:00 /sbin/mingetty tt root 1194 0.0 0.3 1568 444 tty4 S 13:32 0:00 /sbin/mingetty tt root 1195 0.0 0.3 1568 444 tty5 S 13:32 0:00 /sbin/mingetty tt root 1196 0.0 0.3 1568 444 tty6 S 13:32 0:00 /sbin/mingetty tt root 1197 0.0 1.5 6304 1976 ? S 13:33 0:00 sshd: nicolas [pr nicolas 1199 0.1 1.6 6304 2076 ? S 13:33 0:00 sshd: nicolas@pts nicolas 1200 0.1 1.2 2784 1600 pts0 S 13:33 0:00 -bash nicolas 1425 0.0 0.6 2420 780 pts0 R 13:37 0:00 ps aux Y también: [nicolas]$ ps -ef
UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:31 ? 00:00:03 init [3] root 2 1 0 13:31 ? 00:00:00 [ksoftirqd/0] root 3 1 0 13:31 ? 00:00:00 [events/0] root 4 1 0 13:31 ? 00:00:00 [kblockd/0] root 5 1 0 13:31 ? 00:00:00 [kapmd] root 6 1 0 13:31 ? 00:00:00 [pdflush] root 7 1 0 13:31 ? 00:00:00 [pdflush] root 8 1 0 13:31 ? 00:00:00 [kswapd0] root 9 1 0 13:31 ? 00:00:00 [aio/0] root 11 1 0 13:31 ? 00:00:00 [kseriod] root 15 1 0 13:31 ? 00:00:00 [kjournald] root 121 1 0 13:31 ? 00:00:00 devfsd /dev root 211 1 0 13:31 ? 00:00:00 [khubd] root 346 1 0 13:31 ? 00:00:00 [kjournald] root 786 1 0 13:32 ? 00:00:00 syslogd -m 0 -a /var/spool/postf root 794 1 0 13:32 ? 00:00:00 klogd -2 root 912 1 0 13:32 ? 00:00:00 /usr/sbin/sshd root 1145 1 0 13:32 ? 00:00:00 crond
root 1191 1 0 13:32 tty1 00:00:00 /sbin/mingetty tty1 root 1192 1 0 13:32 tty2 00:00:00 /sbin/mingetty tty2 root 1193 1 0 13:32 tty3 00:00:00 /sbin/mingetty tty3 root 1194 1 0 13:32 tty4 00:00:00 /sbin/mingetty tty4 root 1195 1 0 13:32 tty5 00:00:00 /sbin/mingetty tty5 root 1196 1 0 13:32 tty6 00:00:00 /sbin/mingetty tty6 root 1197 912 0 13:33 ? 00:00:00 sshd: nicolas [priv] nicolas 1199 1197 0 13:33 ? 00:00:00 sshd: nicolas@pts/0 nicolas 1200 1199 0 13:33 pts0 00:00:00 -bash
nicolas 1426 1200 0 13:37 pts0 00:00:00 ps -ef
Atención: todo usuario puede ver todos los procesos iniciados en el sistema. En cierto modo, es posible, según el nombre de los procesos iniciados, deducir la actividad de otro usuario sin que lo sepa, sin poseer permisos de administración especiales; ello no presenta ningún problema para el correcto funcionamiento del sistema, pero esta consideración tiene su importancia desde el punto de vista ético.
Detalle de la información mostrada
Las principales columnas que aparecen en la vista del comando ps son:
%CPU Porcentaje de tiempo de procesador utilizado desde la
ejecución del comando.
%MEM Porcentaje de uso de la memoria disponible.
COMMAND o
CMD Nombre del comando que originó el proceso.
GID o GROUP Identidad del grupo bajo la cual se ejecuta el proceso. NI Nivel de prioridad del proceso.
PID Identificador del proceso.
PPID Identificador del proceso padre.
RSS Cantidad de memoria RAM utilizada (en KB).
START o
STAT Estado del proceso.
TIME Tiempo total de uso de la CPU para este proceso.
TT o TTY
El nombre del terminal al que está vinculado el proceso. En el caso de un proceso no asociado a un terminal como un
demonio, este campo contiene el carácter "?".
UID o USER Identidad del usuario bajo la cual se ejecuta el proceso. Campo STAT
Los estados definidos por el campo STAT presentan tres caracteres. En Linux, los valores del primero significan:
R
(Running) Proceso en curso de ejecución.
T
(sTopped) Proceso parado (con las teclas [Ctrl]+[z] por ejemplo).
S
(Sleeping) Proceso dormido, en espera de procesador.
D
(Device)
Proceso dormido en espera de un recurso (generalmente una entrada/salida). Los procesos en este estado no pueden interrumpirse.
Z
(Zombie)
Proceso terminado. Seguirá en este estado hasta que su padre lo note y recupere su código de retorno. Como los anteriores (D), esos procesos no pueden interrumpirse, pero no consumen ningún recurso, excepto una entrada en la tabla de procesos.
El segundo carácter del campo STAT está ubicado en W si el proceso se ha movido al espacio de paginación.
Finalmente, aparece una N o un < como tercer carácter de la columna STAT si el proceso es respectivamente de menor o de mayor prioridad.
2. top
El comando top permite visualizar la actividad del procesador en tiempo real. Muestra la lista de procesos que se ejecutan en ese momento y la refresca automáticamente. Además, esta herramienta usa las mismas etiquetas de columna que ps. Es
posible modificar las columnas presentadas y la ordenación de los procesos de forma interactiva.
Al pulsar la tecla [?] aparece la ayuda del comando. La tecla [q] permite salir de top. top - 13:38:26 up 6 min, 1 user, load average: 0.11, 0.10, 0.06 Tasks: 28 total, 2 running, 26 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.3% hi, 0.0% si
Mem: 126300k total, 36368k used, 89932k free, 3228k buffers
Swap: 511520k total, 0k used, 511520k free, 22776k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1427 nicolas 16 0 2172 1004 1964 R 0.7 0.8 0:00.09 top 1 root 16 0 1584 520 1424 S 0.0 0.4 0:03.28 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root 5 -10 0 0 0 S 0.0 0.0 0:00.01 events/0 4 root 5 -10 0 0 0 S 0.0 0.0 0:00.11 kblockd/0 5 root 15 0 0 0 0 S 0.0 0.0 0:00.00 kapmd 6 root 25 0 0 0 0 S 0.0 0.0 0:00.00 pdflush 7 root 15 0 0 0 0 S 0.0 0.0 0:00.05 pdflush 8 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0 9 root 10 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0 11 root 23 0 0 0 0 S 0.0 0.0 0:00.00 kseriod 15 root 15 0 0 0 0 S 0.0 0.0 0:00.14 kjournald 121 root 16 0 2036 1132 1588 S 0.0 0.9 0:00.16 devfsd 211 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd 346 root 15 0 0 0 0 S 0.0 0.0 0:00.00 kjournald 786 root 16 0 1640 604 1468 S 0.0 0.5 0:00.22 syslogd 794 root 16 0 2592 1532 1416 S 0.0 1.2 0:00.41 klogd 912 root 16 0 3152 1420 2940 S 0.0 1.1 0:00.12 sshd 1145 root 16 0 1624 616 1460 S 0.0 0.5 0:00.01 crond 1191 root 18 0 1568 444 1408 S 0.0 0.4 0:00.01 mingetty 1192 root 19 0 1568 444 1408 S 0.0 0.4 0:00.01 mingetty 1193 root 20 0 1568 444 1408 S 0.0 0.4 0:00.01 mingetty 1194 root 21 0 1568 444 1408 S 0.0 0.4 0:00.00 mingetty 1195 root 22 0 1568 444 1408 S 0.0 0.4 0:00.00 mingetty 1196 root 22 0 1568 444 1408 S 0.0 0.4 0:00.01 mingetty 1197 root 16 0 6304 1976 5844 S 0.0 1.6 0:00.12 sshd 1199 nicolas 16 0 6304 2076 5844 R 0.0 1.6 0:00.55 sshd 1200 nicolas 15 0 2784 1600 2376 S 0.0 1.3 0:00.32 bash Para modificar los campos presentados, pulse la tecla [f] (field) y selecciónelos en un menú.
Este comando acepta también un archivo de configuración para definir su
vista predeterminada. Este archivo es /etc/toprc para una configuración global de todos los usuarios y ~/.toprc (en el directorio personal del usuario) para una configuración personalizada.
3. pstree
pstree es otro comando presente en Linux. Permite mostrar los nombres de procesos de
forma jerárquica; así es más fácil conocer su filiación. [nicolas]$ pstree init-+-aio/0 |-crond |-devfsd |-events/0 |-kapmd |-kblockd/0 |-khubd |-2*[kjournald] |-klogd |-kseriod |-ksoftirqd/0 |-kswapd0 |-6*[mingetty] |-2*[pdflush] |-sshd---sshd---sshd---bash---pstree `-syslogd
Desde luego, es posible mostrar el PID de los procesos con la opción -p.
Esta vista es más condensada que las de ps o top porque el comando pstree sólo muestra una línea cuando existen varias instancias del mismo proceso; el número que aparece delante del carácter * indica el número de instancias correspondientes.