domingo, 14 de abril de 2019

Procesos y Jobs


Procesos

Un proceso es una instancia de un ejecutable o programa que se encuentra corriendo.

Estados de un procesos

R = Runnning
S = Un proceso que está esperando a que se cumpla alguna condición
D = Proceso Ininterrumpible
K = Idéntico al interior, es ininterrumpible pero si puede ser “matado”
T = Stopped
Z = Proceso Zombie

El comando que utilizamos para saber el status de un procesos es el comando ps lo podemos utilizar con alguna de las siguientes opciones:

aux
lax
-ef

Por ejemplo con un ps -ef podemos ver procesos ejecutándose, quien los está ejecutando, su ID de proceso, si tiene salida a una terminal o en pantalla (tty, pts) o se están ejecutando en background (?), el tiempo que lleva ejecutándose y el comando que ejecuta (entre [ ] algunos que  de kernel)




Jobs

Los jobs nos permiten desde una instancia de shell correr y administrar multiples comandos al mismo tiempo. Solamente un job a la vez puede estar conectado con la terminal que controla la entrada del teclado y salida al monitor. Cuando un job no está corriendo conectado con la terminal que está controlando se le conoce como corriendo en background.

Si queremos ejecutar un proceso en background lo hacemos agregano al final el símbolo &

En el siguiente ejemplo podemos ver algunos procesos enviados a ejecutarse en background, vemos como se genera su PID y que los podemos ver en ejecución con un ps -ef. De igual forma como podemos listar los jobs ejecutándose con el comando jobs así como el jobID de cada uno de ellos



Si queremos traer a la terminal en control (foreground) un proceso ejecutandose en el background lo podemos hacer con el comando fg y el JobID(%jobID). Ejemplo fg %1 .Si queremos suspender ese job que tenemos ahora en la terminal podemos ejecutar ctrl+Z o, en su caso, ctrl+C para matarlo

Al igual que con fg traemos a foreground un procesos podemos también enviar a background con el comando bg (%jobID). Si el job estaba detenido comenzará a ejecutarse nuevamente

Si ejecutamos el comando ps j podemos ver los procesos, el job que los está ejecutando así como el status del job


Control de procesos

Se tiene las siguientes señales para controlar procesos:

1 – HUP – Se usa para reportar la terminación de un proceso o para reiniciarlizarlo
2 – INT – Termina un programa (ctrl+C)
3 – QUIT – Parecido a INT pero genera un dump del proceso (ctrl + \)
9 – KILL – Mata a un proceso
15 – TERM – Para terminar un proceso, a diferencia de KILL no lo forza, se lo pide
18 – CONT – Para continuar la ejecución de un proceso
19 – STOP – Terminar o suspende la ejecución de un proceso de forma forzada.
20 – TSTP – Pide terminar o suspender la ejecutción ( ctrl + Z)

El comando utilizado para enviar estas señales es el comando kill con la siguiente sintaxis:
kill -signal PID

Si queremos terminar varios procesos que cumplan un criterio, por ejemplo el nombre, podemos utilizar el comando killall con la siguiente sintaxis:
killall -signal -u username command_pattern

El comando pkill nos permite hacer lo mismo que killall pero con criterios de búsqueda mas avanzados como el UID, GID, Parent, Terminal y lo utilizamos con la siguiente sintaxis:
pkill -signal -G GID command_pattern

Con el comando pstree podemos ver todo el arbol de proceso de un sistema o un usuario

Ejemplo:

Queremos saber los procesos que está ejecutando un usuario:
pgrep -l -u javier

Podemos validar que el usuario está logueado en el sistema comando w -f, el cual nos indica también el TTY o PTS donde está logueado el usuario

Para matar todos los procesos de ese usuario ejecutamos:
pkill -15 -u javier

Para matar los procesos que está ejecutando en determinada terminal:
pkill -15 -t pts/1


No hay comentarios:

Publicar un comentario

Servicios y Demonios

Un demonio es un procesos que corre en el background para realizar un servicios. Generalmente se lanzan desde el inicio de...