fbpx Comando ps en Linux: listar procesos con ps aux y ps -ef | Certificação Linux

Cómo usar el comando ps en Linux para listar procesos en ejecución

📅 01/01/2019 ⏱ 10 min ✍️ Uira Ribeiro
Linuxcomandos
Cómo usar el comando ps en Linux para listar procesos en ejecución
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

El comando ps en Linux genera una lista con todos los procesos en ejecución y sus atributos.

Hubo un momento en Linux en que coexistieron dos versiones del comando ps en diferentes distribuciones. Hace poco los desarrolladores decidieron unir las dos versiones del ps en una única versión, pero dejaron las opciones de ambas versiones coexistiendo.

De esta forma, al informar un parámetro en el ps, los resultados van a ser diferentes:

  • Sin usar el signo menos, el ps se comporta mostrando los procesos en el estilo BSD;
  • Con un signo menos apenas "-" el ps se comporta mostrando los procesos en el estilo de Unix, usando el estándar POSIX;
  • Con dos signos menos "--" el ps se comporta mostrando los procesos en el estilo GNU.

No existe correcto o incorrecto, simplemente preferencia histórica.

Las opciones más frecuentes del ps son:

  • a  Muestra los procesos en ejecución conectados a una terminal, de todos los usuarios;
  • -a  Muestra los procesos en ejecución conectados a una terminal, exceptuando los procesos de sesión;
  • -e, -A  Muestra todos los procesos;
  • -u  Muestra la lista de procesos incluyendo el nombre de los usuarios propietarios de los procesos e inicio de las ejecuciones, porcentaje de CPU utilizada, porcentaje de memoria utilizada y terminal asociado;
  • -x  Muestra la lista de procesos, incluyendo aquellos que no tienen una terminal asociada a él. Útil para visualizar procesos servidores (daemons);
  • -f  Muestra los procesos en forma de árbol. Muy útil para identificar la relación de proceso padre e hijo entre los procesos en ejecución;
  • -H  Muestra la jerarquía de los procesos en forma de árbol;

Consulta el help del comando ps para más opciones.

En este ejemplo el ps solamente muestra los procesos del usuario logueado y conectados a la terminal:

$ ps
  PID TTY          TIME CMD
 1415 pts/0    00:00:00 ps
30019 pts/0    00:00:00 bash

Para mostrar todos los procesos de todos los usuarios conectados a una terminal:

$ ps a  PID TTY      STAT   TIME COMMAND 1628 pts/0    R+     0:00 ps a 3297 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux27159 pts/0    T      0:00 sudo find / -iname backup.sh27160 pts/0    T      0:00 find / -iname backup.sh30019 pts/0    Ss     0:00 -bash

Observa cómo la opción "-a" es diferente de "a":

$ ps -a  PID TTY          TIME CMD 1675 pts/0    00:00:00 ps27159 pts/0    00:00:00 sudo27160 pts/0    00:00:00 find

La opción "u" agrega algunos atributos de los procesos:

$ ps auUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot      3297  0.0  0.0 121336  1600 tty1     Ss+  ago15   0:00 /sbin/agetty --noclear tty1 linuxroot      3298  0.0  0.1 120984  2064 ttyS0    Ss+  ago15   0:00 /sbin/agetty --keep-baud 115200,38400,9600 ec2-user  3414  0.0  0.1 164440  4032 pts/0    R+   18:38   0:00 ps auroot     27159  0.0  0.3 216984  6608 pts/0    T    17:46   0:00 sudo find / -iname backup.shroot     27160  0.0  0.1 128308  3944 pts/0    T    17:46   0:00 find / -iname backup.shec2-user 30019  0.0  0.2 127120  4348 pts/0    Ss   14:48   0:00 -bash

Para obtener una lista completa de los procesos en ejecución, no solo aquellos que están conectados a la terminal, agrega la opción "x":

$ ps auxUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.0  0.2 199452  4968 ?        Ss   ago15   9:23 /usr/lib/systemd/systemd --switched-root --root         2  0.0  0.0      0     0 ?        S    ago15   0:00 [kthreadd]( ... )ec2-user 30018  0.0  0.2 152864  4384 ?        S    14:48   0:00 sshd: ec2-user@pts/0ec2-user 30019  0.0  0.2 127120  4348 pts/0    Ss   14:48   0:00 -bashpostfix  30391  0.0  0.3  90536  6928 ?        S    18:06   0:00 pickup -l -t unix -u

Los procesos cuyo comando está envuelto en corchetes, como en el destaque de [ktheradd], indican que fueron removidos de la memoria RAM y colocados en la memoria virtual en disco. Cuando los procesos están en la memoria virtual en disco, se llaman sleeping.

El Kernel coloca con frecuencia los procesos a dormir, mientras están esperando algún evento, que puede ser, por ejemplo, cargar datos del disco o una conexión de red. Cuando el evento se activa, el Kernel envía una señal al proceso.

Las opciones "efH" muestran todos los procesos, con su jerarquía en forma de árbol:

$ ps -efHUID        PID  PPID  C STIME TTY          TIME CMDroot      3252     1  0 ago15 ?        00:00:00   /usr/sbin/sshd -Droot     29998  3252  0 14:48 ?        00:00:00     sshd: ec2-user [priv]ec2-user 30018 29998  0 14:48 ?        00:00:00       sshd: ec2-user@pts/0ec2-user 30019 30018  0 14:48 pts/0    00:00:00         -bashec2-user  4176 30019  0 18:43 pts/0    00:00:00           ps -efH

Es posible experimentar con los comandos, como, por ejemplo, saber cuáles son los procesos que más consumen CPU:

$ ps aux | sort -nrk 3,3 | head -n 5USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDnginx     3342  0.2  1.6 426976 34048 ?        Sl   ago15 133:04 amplify-agentrpc       2729  0.0  0.1  73828  3276 ?        Ss   ago15   0:02 /sbin/rpcbind -wroot      9421  0.0  0.0      0     0 ?        I    set13   0:01 [kworker/u30:1]root         9  0.0  0.0      0     0 ?        I    ago15   0:00 [rcu_bh]

Una opción bastante interesante para los programadores es ver los procesos en ejecución ordenados por el consumo de memoria. Para eso, basta con cambiar la columna del sort a 4:

$ ps -aux | sort -nk 4 | head -5chrony     745  0.0  0.0  80736  2988 ?        S    mar17   0:52 /usr/sbin/chronyddbus       727  0.0  0.0   8872  3668 ?        Ss   mar17  12:10 /usr/bin/dbus-daemon --systemec2-user 24036  0.0  0.0  21720  5108 ?        S    11:37   0:01 sshd: ec2-user@pts/0ec2-user 24037  0.0  0.0 117164  6248 pts/0    Ss   11:37   0:00 -bashec2-user 32446  0.0  0.0 118552  3448 pts/0    R+   16:51   0:00 ps -aux

Independientemente de cómo se quieran ver los procesos en ejecución, algunos atributos son importantes para un administrador Linux, tales como:

Usuario propietario del proceso (UID)

Es imposible ejecutar un programa en Linux sin que tenga un usuario propietario. Esto significa que el programa va a tener los permisos de acceso al disco y recursos del usuario que ejecutó el programa. Esta noción es importante, ya que es posible ejecutar un programa como otro usuario que no sea el usuario logueado.

Número de Proceso - Process ID (PID)

Todo programa en ejecución recibe un ID numérico único. Este número puede ser usado para enviar señales al programa en ejecución.

Proceso Padre (PPID)

Todo programa excepto init o systemd tiene un proceso padre, que originó su ejecución. Es común que un programa servidor, por ejemplo, tenga un proceso padre (master) y varios procesos o threads (hijos).

Los threads pueden entenderse como fragmentos del programa que se ejecutan como si fueran procesos hijos, pero más livianos, ya que comparten muchas cosas con el proceso padre. Esta tecnología es muy usada en los procesadores con varios núcleos (cores) para permitir la ejecución de varios threads al mismo tiempo.

% de CPU

Cada proceso recibe una fracción del tiempo de la CPU, que puede ser contabilizada y sirve como parámetro para que el administrador sepa cuáles son los procesos que consumen mucha CPU.

% de Memoria

Cada proceso en ejecución también recibe una fracción de la memoria RAM, que también puede ser contabilizada para que el administrador sepa los procesos que consumen mucha RAM.

Hora de inicio (STIME)

Cada proceso también tiene como atributo la hora en que fue ejecutado.

Tiempo de CPU (TIME)

Cada proceso también tiene como atributo el tiempo de CPU acumulado en su ejecución.

Línea de comando (CMD)

Los procesos también mantienen un atributo que es la línea de comando que fue usada en la ejecución.

Terminal (TTY)

Cada proceso puede o no tener un Terminal asociado. A título de curiosidad, lo que el comando ps en realidad hace es recorrer alguna información del directorio /proc. Toma como ejemplo el proceso sshd:

$ ps aux | grep sshroot      3252  0.0  0.3 112928  7848 ?        Ss   ago15   0:00 /usr/sbin/sshd -D

Si miramos el directorio /proc, tendrá un subdirectorio con el número 3252, que corresponde al PID del programa sshd:

# cd /proc/3252# lsattr        coredump_filter  gid_map    mem         oom_adj        root          stack    timerslack_nsautogroup   cpuset           io         mountinfo   oom_score      sched         stat     uid_mapauxv        cwd              latency    mounts      oom_score_adj  schedstat     statm    wchancgroup      environ          limits     mountstats  pagemap        sessionid     statusclear_refs  exe              loginuid   net         patch_state    setgroups     syscallcmdline     fd               map_files  ns          personality    smaps         taskcomm        fdinfo           maps       numa_maps   projid_map     smaps_rollup  timers

Por ejemplo, la línea de comando del programa con el PID 3252 puede ser consultada con un simple cat:

# cat cmdline /usr/sbin/sshd-D

Varias informações sobre un proceso se pueden ver en el directorio /proc/[número del PID]. El utilitario ps solo organiza la información para una lectura más humana.

Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la matrícula aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.

¿Te gustó? Comparte

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp