Administración de procesos

Estas aquí:
<< Regresar

Lista de procesos

La instrucción ps (process status) permite obtener información sobre los procesos en curso. Si se ejecuta solo, visualiza únicamente los procesos en curso iniciados por el usuario y desde la consola actual.

ps
  PID TTY       TIME CMD
13350 pts/1 00:00:00 bash
21701 pts/1 00:00:00 ps

al escribir ps con las banderas de -f y -e nos ampliará la información de cada proceso y al mismo tiempo nos mostrará todos los procesos en curso

ps -fe
UID       PID   PPID  C STIME TTY       TIME CMD
...
root     1252      1  0 nov30 ?     00:00:02 /usr/lib/upower/upowerd
Debian-+ 1292      1  0 nov30 ?     00:00:00 /usr/bin/pulseaudio --start --lo
rtkit    1293      1  0 nov30 ?     00:00:01 /usr/lib/rtkit/rtkit-daemon
root     1303      2  0 nov30 ?     00:00:00 [krfcommd]
Debian-+ 1315   1153  0 nov30 tty7  00:00:03 /usr/lib/gnome-settings-daemon/g
root     1316      1  0 nov30 ?     00:07:59 /usr/lib/packagekit/packagekitd
colord   1341      1  0 nov30 ?     00:00:00 /usr/lib/colord/colord
dnay     1363      1  0 nov30 ?     00:00:00 /lib/systemd/systemd --user
dnay     1364   1363  0 nov30 ?     00:00:00 (sd-pam)
...

El parámetro -u permite precisar una lista de uno o varios usuarios separados por una coma. El parámetro -g efectúa lo mismo pero para los grupos, -t para los terminales y -p para unos PID determinados.

ps -u root
PID TTY       TIME CMD
1   ?     00:00:05 systemd
2   ?     00:00:00 kthreadd
3   ?     00:00:03 ksoftirqd/0
5   ?     00:00:00 kworker/0:0H
7   ?     00:01:39 rcu_sched
8   ?     00:00:00 rcu_bh
9   ?     00:00:00 migration/0
10  ?     00:00:00 watchdog/0
11  ?     00:00:00 watchdog/1

Finalmente el parámetro -l ofrece más información técnica.

ps -l
F S   UID    PID   PPID C PRI NI ADDR   SZ WCHAN  TTY        TIME CMD
0 S  1000  13350   1744 0  80  0 -    5879 -      pts/1  00:00:00 bash
0 R  1000  21837  13350 0  80  0 -    6851 -      pts/1  00:00:00 ps

Estas son algunas de las columnas que muestra la instrucción ps en sus diferentes banderas:

Columna Definición
UID User ID, identificador de usuario
PID Process ID, identificador del proceso
PPID Parent Process ID, identificador del proceso padre
C Factor de prioridad, entre más elevado sea el número, mayor será su prioridad
STIME Hora de inicio del proceso
TTY Nombre de la terminal desde la cual se ejecutó el proceso
TIME Duración del proceso
CMD Instrucción ejecutada
S Estado del proceso S (sleep), R (Running) y Z (Zombie)
PRI Prioridad del proceso
NI Nice* se verá más adelante.

Es importante mencionar que se puede hacer uso de pipes para obtener la información de un proceso, con la siguiente sintaxis:

ps aux | grep <nombre del proceso>

Ejemplo:

ps aux | grep ssh
dnay 1432 0.0 0.0 11116 328 ? Ss nov30 0:00 /usr/bin/ssh-agent x-session-manager
dnay 21867 0.0 0.0 12748 2148 pts/1 S+ 14:35 0:00 grep ssh

Señales en los procesos

Es posible detener un proceso en primer plano con la combinación de teclas [Ctrl] Z. Cuando un proceso se ejecuta en segundo plano, no lo puede parar cualquier combinación de teclas, al menos que se utilice el gestor de jobs con fg y bg. Para ello es necesario mandarle señales especiales a ese proceso en segundo plano.

La instrucción kill manda señales a los procesos, no necesariamente los termina/mata como pudiese parecer.

kill [-l] -señal PID [PID2...]

Las señales es una de las formas en la que podemos comunicarnos con los procesos, los cuales la interceptarán y reaccionarán. Se pueden ignorar algunas señales, pero otras no. Según los Unix, se dispone de un número más o menos importante de señales. Se numeran y nombran las señales, pero cuidado: si bien los nombres suelen ser comunes de un Unix a otro, los números no lo son obligatoriamente. Podemos listar las señales con la instrucción kill -l:

kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

La señal más empleada es la 9, SIGKILL ya que no puede ignorarse forzando al proceso a finalizar no importando lo que suceda.

sleep 100&
[1] 22398
kill 22398
[1]+ Terminado sleep 100
sleep 100&
[1] 22408
kill -9 22408
[1]+ Terminado (killed) sleep 100

Para eliminar procesos zombies (programa que ha finalizado sus tareas pero sigue en ejecución) se puede hacer uso del siguiente comando, el cual obtiene una variable que es resultado del uso de dos comandos.

kill $(ps -A -o stat,ppid|awk '/[zZ]/{print $2}')

ps usa -A para mostrar todos los procesos y -o acepta como argumentos: user, group, comm, args, pid, ppid, pgid, etime, nice, rgroup, ruser, time, tty, vsz, sid, stat, rss.
awk busca el stat con resultado zZ e imprime su proceso de identificación.
El resultado se da como variable al comando kill.

Nice y renice

La instrucción nice permite iniciar un comando con una prioridad más baja para permitir a otros posibles procesos ejecutarse más rápidamente.

nice [-valor] instrucción [argumentos]

Un valor positivo causará una bajada de prioridad; uno negativo, el aumento de la prioridad (si está autorizado). El valor debe estar comprendido entre ­-20 y 20. Cuanto más elevado es el valor, menor es la prioridad.

nice -10 ls -1R / >lista 2>/dev/null & [1] 23872
ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
0 S  1000  13350   1744  0  80   0 -  5922 -      pts/1  00:00:00 bash
0 R  1000  23874  13350  0  80   0 -  6851 -      pts/1  00:00:00 ps [1]+ Salida 1 nice -10 ls -1R / > lista 2> /dev/null

El comando renice funciona un poco como nice, pero permite modificar la prioridad en función de un usuario, un grupo o un PID. El proceso debe estar ya ejecutándose.

renice [-n prio] [-p] [-g] [-u] ID

La prioridad debe estar entre ­20 y 20. El usuario estándar sólo puede utilizar los valores entre 0 y 20 que permiten bajar la prioridad. La opción -p precisa un PID, -g un GID y -u un UID.

Uso de top

Si bien ps y sus diversas banderas nos permiten conocer los procesos que tiene el usuario o el sistema en general tienen la desventaja de que se muestran de forma estática y no permite hacer un seguimiento dinámico de lo que sucede con los procesos en tiempo real. Para solventar ese problema contamos con la instrucción top que nos permiten saber el estado en tiempo real del sistema, los procesos y algunos detalles más.

Su sintaxis es muy sencilla:

top

Y desplegará sobre la terminal una interfaz en modo texto que se va a ir actualizando cada 3 segundos. Con el resumen del estado del sistema y la lista de procesos que se están ejecutando:

Tiempo de actividad

En la primera línea vemos:

top - 17:01:04 up 3 days, 7:21, 1 user, load average: 0.06, 0.74, 1.00

En donde se muestra

  • Hora actual.
  • Tiempo que ha estado el sistema encendido.
  • Número de usuarios
  • Carga media en intervalos de 5, 10 y 15 minutos respectivamente.

practicamentes es lo mismo que la instrucción uptime.

Tareas

La segunda línea muestra el total de tareas y procesos, los cuales pueden estar en diferentes estados.

Tasks: 242 total, 1 running, 241 sleeping, 0 stopped, 0 zombie
  • Running (ejecución): procesos ejecutándose actualmente o preparados para ejecutarse.
  • Sleeping (hibernación): procesos dormidos esperando que ocurra algo (depende del proceso) para ejecutarse.
  • Stopped (detenido): ejecución de proceso detenida.
  • Zombie el proceso no está siendo ejecutado. Estos procesos se quedan en este estado cuando el proceso que los ha iniciado muere (padre).

Estado del procesador

%Cpu(s): 9.6 us, 3.0 sy, 0.0 ni, 87.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st

Nos muestra los porcentajes de uso del procesador.

  • us (user, usuario): tiempo de CPU de usuario.
  • sy (system, sistema): tiempo de CPU del kernel.
  • id (idle, inactivo): tiempo de CPU en procesos inactivos.
  • wa (wating, en espera): tiempo de CPU en procesos en espera.
  • hi (harware interruption, interrupciones de hardware): interrupciones de hardware.
  • si (software interruption, interrupciones de software): tiempo de CPU en interrupciones de software.

Memoria física

KiB Mem : 7876288 total, 73988 free, 3681088 used, 4121212 buff/cache
  • Memoria total.
  • Memoria disponible.
  • Memoria empleada.
  • Memoria empleada por el búffer.
  • Memoria virtual
KiB Swap: 8081404 total, 7974948 free, 106456 used. 3615516 avail Mem
  • Memoria total.
  • Memoria usada.
  • Memoria libre.
  • Memoria en caché.

Columnas

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  • PID: es el identificador de proceso. Cada proceso tiene un identificador único.
  • USER: (USUARIO): usuario propietario del proceso.
  • PR: prioridad del proceso. Si pone RT es que se está ejecutando en tiempo real.
  • NI: asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más prioridad que otro con valor alto (hasta 19).
  • VIRT: cantidad de memoria virtual utilizada por el proceso.
  • RES: cantidad de memoria RAM física que utiliza el proceso.
  • SHR: memoria compartida.
  • S (ESTADO): estado del proceso.
  • %CPU: porcentaje de CPU utilizado desde la última actualización.
  • %MEM: porcentaje de memoria física utilizada por el proceso desde la última actualización.
  • TIME+ (HORA+): tiempo total de CPU que ha usado el proceso desde su inicio.
  • COMMAND: comando utilizado para iniciar el proceso.

Al presionar la tecla c, top nos mostrará la ruta absoluta de cada proceso en ejecución


Es posible cambiar el tiempo de actualización de la interfaz, presionando la tecla d seguido del tiempo de refresco en segundos.

Terminar un proceso

Con presionar k, nos pedirá el PID de proceso que deseemos terminar.

Renice

Presionando r, seguido del número del PID.


Para salir solo basta presionar q

Video: Ejemplo sobre Procesos

Uso de ps, kill y top

Última actualización: septiembre 26, 2018

Deja un comentario