martes, 12 de noviembre de 2013

Control de Procesos

 

SEÑALES

Es como el sistema de peticiones a nivel de los procesos para:

  1. Vía de comunicación entre procesos
  2. Permitir acciones del propietario o del superusuario
  3. Permitir al kernel notificar alguna infracción
  4. Permitir al kernel enviar una notificación de interés (finalización de un proceso hijo, disponibilidad en un canal I/O)

Si el proceso que recibe la señal reconoce el mensaje (tiene una rutina asignada a esa señal) procederá a realizar alguna acción, como finalizar el proceso, vaciar la memoria, etc.

Para evitar que lleguen señales los programas podrían solicitar que estas se ignoren (descartar y no afecta al proceso) o bloqueen (se coloca en cola hasta ser desbloqueado).

 

TABLA DE ALGUNAS SEÑALES DE INTERES

#

Nombre

Descripción

Predeterminado

¿Ignorar?

¿Bloquear?

¿Limpiar memoria?

1

HUP

Detiene el sistema

Finalizar

SI

SI

No

2

INT

Interrumpe la ejecución del sistema

Finalizar

SI

SI

No

3

QUIT

Salir

Finalizar

SI

SI

SI

9

KILL

Cerrar

Finalizar

NO

No

No

?

BUS

Error en el bus

Finalizar

SI

SI

SI

11

SEGV

Fallo de segmentación

Finalizar

SI

SI

SI

15

TERM

Finalización de software

Finalizar

SI

SI

NO

?

STOP

Detener

Detener

SI

NO

NO

?

TSTP

Detener el teclado

Detener

SI

SI

NO

?

CONT

Continuar (luego de detener)

Ignorar

SI

NO

NO

?

WINCH

Cambia la ventana

Ignorar

SI

SI

NO

?

USR1

Definida por el usuario

Finalizar

SI

SI

NO

?

USR2

Definida por el usuario

Finalizar

SI

SI

NO

La mayoría de las otras señales (que no están en la tabla) se usan para informar de errores y suelen terminar con la limpieza de la memoria.

BUS y SEGV son señales de error bastante comunes, hasta el 90% de los casos en que una aplicación se ‘cuelga’.

 

                                  COMANDOS                                

KILL y KILLALL

Frecuentemente usados para finalizar procesos, los usuarios con sus propios procesos, el superusuario con cualquier proceso. La sintaxis es:

kill [-señal] pid

En donde ‘señal’ es un número o el nombre simbólico que representa la señal que se desea enviar (tabla anterior), y pid es el número de identificación del proceso al que enviamos la señal:

kill -9 23456

kill -KILL 23456

Aun así vale recordar que algunos procesos podrían encontrarse en una situación de ‘fortaleza’ que KILL no podría detenerlo (por ejemplo cuando está esperando la detención de un disco).

La opción ‘killall’ de forma similar envía la señal, pero, para todos los procesos.

 

ESTADOS DEL PROCESO

Cuatro posibles estados:

  1. Ejecutable: Listo para iniciar en cuanto pueda acceder al CPU, ya tiene disponibles todos los recursos que necesita, si en el transcurso pierde alguno de los recursos se dará una señal para pasarlo al estado ‘suspendido’.
  2. Suspendido: Está esperando a que ocurra un evento determinado (los Shell interactivos y demonios pasan la mayor parte del tiempo en este estado) como acceso a un dispositivo, ingreso de datos, restablecer una conexión de red. Quedará en ese estado hasta que se atienda su pedido.
  3. Detenido: Aquellos a los que se les prohíbe ejecutarse (con STOP o TSTP), pero podrían continuarse con CONT. Es similar a ponerlo en suspensión salvo que la única forma de ponerlo en marcha es mediante un proceso, o usar un proceso para finalizarlo.
  4. Zombie: Son procesos que ya completaron su ejecución pero, no se les asigna un nuevo estado (usamos ‘ps’ para obtener su PPID y PID).

 

NICE Y RENICE

Valor numérico de un proceso que le dice al kernel que prioridad (o influencia) tiene en relación a otros procesos.

A menos que el usuario lo modifique los procesos heredan el valor de sus padres, los propietarios pueden subir su valor, pero no bajarlo, esto evita que los procesos tengan hijos con mayor prioridad. Solo el superusuario podrá asignar cualquier valor de prioridad.

El valor de ‘nice’ de un proceso se podría determinar durante su creación, si este valor requiere ser modificado se usará el comando ‘renice

 

PS: VISUALISAR PROCESOS

El comando ‘ps’ nos permitirá ver algunos de los datos del proceso de interés tales como el PID, UID, prioridad y para controlar la finalización de procesos, la cantidad de memoria que usa el proceso, tiempo consumido del CPU, estado real, y los zombies también aparecen.

Este comando podría variar de un sistema basado en UNIX a otro.

Usar ‘ps aux' veremos todos los procesos que están ejecutándose en el sistema, en la columna comandos veremos algunos entre corchete y no son verdaderamente comandos, son hilos de ejecución ejecutándose como procesos. Algunos datos de interés:

  1. USER: Nombre del usuario propietario del proceso
  2. PID: ID del proceso
  3. %CPU: Porcentaje de CPU que usa este proceso
  4. %MEM: Porcentaje de memoria real que se esta empleando
  5. VSZ: Tamaño virtual del proceso
  6. RSS: Número de páginas en la memoria (Resident set size)
  7. TTY: ID del finalizador
  8. STAT: Estado del proceso (R ejecutable, D suspensión ininterrumpible, S suspensión, T detenido, Z zombie, existen etiquetas adicionales)
  9. START: Hora en que se inició el proceso
  10. TIME: Tiempo que el proceso a usado la CPU
  11. COMMAND: Argumento y nombre del comando

 

 

 

No hay comentarios:

Publicar un comentario