sábado, 1 de noviembre de 2014

Ps instantánea de los procesos en el sistema

Ps se utiliza para obtener una instantánea de los procesos en el sistema. Muchas veces es necesario obtener información valiosa, como por ejemplo determinar bajo qué usuario corre un proceso, y utilizamos el viejo y conocido “ps aux” sin saber bien que opciones estamos utilizando.
Generalmente en cualquier distribución de GNU/Linux se incluye la versión de ps que acepta diferentes tipos de opciones: las opciones UNIX que son precedidas por un guión (dash), las opciones BSD que no utilizan guión, y las opciones GNU largas que se preceden por dos guiones. Estas opciones se pueden mezclar, pero a veces ocasionan conflictos o existen opciones sinónimas que producen los mismos resultados. Por ejemplo “ps -aux” muestra todos los procesos pertenecientes al usuario llamado “x”, ya que no suele existir un usuario llamado “x” ps lo interpreta como el comando “ps aux” e imprime una advertencia :D
Por defecto ps sólo muestra los procesos con el mismo user id efectivo (EUID) que el del usuario que lo ejecuta. Cuando utilizamos ps con las opciones “aux” el resultado es:
a: eliminar la restricción BSD “only yourself” para agregar procesos de otros usuarios
u: utilizar el formato orientado al usuario
x: eliminar la restricción BSD “must have a tty” para agregar procesos que no tengan una tty asociada
De esta forma seleccionamos todos los procesos en el sistema y los mostramos en el formato orientado al usuario.
La salida de “ps aux” es una tabla donde cada fila es un proceso y las columnas contienen la siguiente información:
USER: usuario con el que se ejecuta el proceso
PID: ID del proceso
%CPU: porcentaje de tiempo que el proceso estuvo en ejecución desde que se inició
%MEM: porcentaje de memoria física utilizada
VSZ: memoria virtual del proceso medida en KiB
RSS: “resident set size”, es la cantidad de memoria física no swappeada que la tarea a utilizado (en KiB)
TT: terminal que controla el proceso (tty)
STAT: código de estado del proceso (información detallada más adelante)
STARTED: fecha de inicio del proceso
TIME: tiempo de CPU acumulado
COMMAND: comando con todos sus argumentos
Los códigos de estado del proceso pueden ser:
D: suspendido no interrumpible (generalmente esperando E/S)
R: en ejecución o listo para ejecutarse (en cola)
S: suspendido interrumpible (esperando que se complete un evento)
T: detenido, por una señal de control de trabajo o porque está siendo traceado
W: paginado (no válido a partir del kernel 2.6.xx)
X: muerto (nunca debe ser visto)
Z: proceso difunto (“zombie”), terminado pero no reclamado por el proceso padre
Para los formatos BSD (por ejemplo como cuando se utiliza “ps axo” para mostrar la lista de procesos en un formato definido por el usuario) y cuando se utiliza la palabra clave “stat”, se muestran los caracteres adicionales:
N: baja prioridad
L: tiene páginas bloqueadas en memoria
s: es un líder de sesión (se trata de un proceso que ha iniciado una nueva sesión)
l: es multihilado
+: está en el grupo de procesos en primer plano
Por ejemplo:
$ ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
Algunos ejemplos útiles que se incluyen en el manual de ps son:
Ver todos los procesos en el sistema utilizando la sintaxis estándar:
ps -e
ps -ef
ps -eF
ps -ely
Imprimir un árbol de procesos:
ps -ejH
ps axjf
Obtener información de hilos:
ps -eLf
ps axms
Obtener información de seguridad:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
Ver todos los procesos ejecutando como root (ID efectivo y real) en formato de usuario:
ps -U root -u root u
Entre muchas opciones que tiene ps, es posible ordenar la salida de acuerdo a una columna, para esto se debe utilizar la opción gnu larga “–sort”, por ejemplo para ordenar por tiempo de CPU (si deseamos determinar qué proceso ha utilizado más CPU) seleccionamos el código “cputime”, correspondiente a la columna TIME:
ps aux –sort cputime
Es posible alterar el comportamiento de ps utilizando variables de entorno, la más significativa es “PS_PERSONALITY” la cual afecta la “personalidad” de ps. Se puede setear “PS_PERSONALITY” utilizando export y observar los resultados, por ejemplo:
export PS_PERSONALITY=bsd
ps
PID TTY STAT TIME COMMAND
675 tty4 Ss+ 0:00 /sbin/getty -8 38400 tty4
680 tty5 Ss+ 0:00 /sbin/getty -8 38400 tty5
685 tty2 Ss+ 0:00 /sbin/getty -8 38400 tty2
687 tty3 Ss+ 0:00 /sbin/getty -8 38400 tty3
692 tty6 Ss+ 0:00 /sbin/getty -8 38400 tty6
893 tty1 Ss+ 0:00 /sbin/getty -8 38400 tty1
17774 pts/1 S 0:00 su 17775 pts/1 S 0:00 bash 18064 pts/1 R+ 0:00 ps
export PS_PERSONALITY=linux
ps
PID TTY TIME CMD
17774 pts/1 00:00:00 su 17775 pts/1 00:00:00 bash 18065 pts/1 00:00:00 ps

No hay comentarios:

Publicar un comentario