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