domingo, 8 de diciembre de 2013

CONTROL DE PROCESOS- SEÑALES

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 INTERËS

# 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 NO 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’.

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, reestablecer 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