miércoles, 7 de noviembre de 2007

Señales en linux, freeBSD y Solaris

Una señal es un mensaje que se puede enviar a un proceso, es decir a un programa en ejecución.

Cuando un proceso recibe una señal, este puede tratarla de tres formas distintas:

1. Ignorar la señal, con lo cual no tiene efecto.
2. Invocar a la rutina de tratamiento correspondiente al número de señal. Esta rutina no la codifica el programador, sino que la aporta el kernel y normalmente tiene como fin el terminar el proceso que recibe la señal.
3. Invocar a una rutina que se encarga de tratar la señal y que ha sido creada por el programador. Esta rutina establecerá un mecanismo de comunicación entre procesos o modificará el curso normal del programa.

Cada señal tiene asociado un número entero positivo, que es lo que se intercambia cuando un proceso envía una señal a otro.

Las señales pueden ser clasificadas de las siguiente forma:

1. Señales relacionadas con la terminación de procesos.
2. Señales relacionadas con las excepciones inducidas por los procesos.
3. Señales relacionadas con los errores irrecuperables originados en el transcurso de una llamada al sistema.
4. Señales originadas desde un proceso que se está ejecutando en modo usuario.
5. Señales relacionadas con la interacción con el terminal.
6. Señales para ejecutar un programa paso a paso.

Para enviar una señal desde un proceso a otro o a un grupo de procesos, se emplea el comando

kill -sig pid  Donde

sig: es el numero entero que representa la señar que se uiere enviar

pid: identifica al conjunto de procesos a los que se le desea enviar la señal.


En el UNIX System V hay definidas 19 señales, y en el BSD, 30. Pero existen muchas señales, las cuales las podemos consultar con el comando Kill –l


A continuación pongo una tabla con las señales de FreeBSD y de Solaris


Señales de FreeBSD

Nombre Número Descripción
SIGHUP 1 Terminal de la línea colgar
SIGINT 2 Interrumpir el programa
FALLOS 3 Salir del programa
SIGILL 4 Instrucción ilegal
Trampa 5 Trace trampa
SIGABRT 6 Abortar
Allí 7 Emular instrucción ejecutada
SIGFPE 8 Excepción de punto flotante
SIGKILL 9 Kill programa
SIGBUS 10 Bus de error
SIGSEGV 11 Segmentación de violación
Aquí 12 Bad argumento de llamada al sistema
Señal 13 Escribir en una tubería sin que nadie lo lea
SIGALRM 14 En tiempo real de tiempo expirado
SIGTERM 15 Software señal de terminación
SIGURG 16 Urgente sobre la condición de E / S de canal
SIGSTOP 17 Señal de parada de la terminal no
SIGTSTP 18 Señal de parada de la terminal
± 19 Un proceso está parado continuación
SIGCHLD 20 Notificación a los padres del niño o dejar de salida
SIGTTIN 21 Leer la terminal de antecedentes del proceso
SIGTTOU 22 Escribir a la terminal por los antecedentes del proceso
SIGIO 23 I / O posible en un descriptor
Ilimitado 24 Ha superado el límite de tiempo de CPU
SIGXFSZ 25 Archivo - ha superado el límite de tamaño
SIGVTALRM 26 Virtual temporizador expiró
SIGPROF 27 Perfiles de temporizador expiró
SIGWINCH 28 Tamaño de la ventana cambiado
SIGINFO 29 Solicitud de información
SIGUSR1 30 Definida por el usuario una señal
SIGUSR2 31 Definida por el usuario señal 2
SIGTHR 32 Thread interrumpir



Señales de Solaris

Nombre Número Descripción
SIGHUP 1 Cuelga
SIGINT 2 Interrupciones
FALLOS 3 Cierra
SIGILL 4 Instrucción ilegal
Trampa 5 Trace trampa
SIGABRT 6 Utilizado por abortar
Allí 7 EMT instrucción
SIGFPE 8 Excepción de punto flotante
SIGKILL 9 Matar (no puede ser capturado o ignorado)
SIGBUS 10 Bus de error
SIGSEGV 11 Segmentación de violación
Aquí 12 Bad argumento de llamada al sistema
Señal 13 Escribe en una tubería sin que nadie lo lea
SIGALRM 14 Alarma
SIGTERM 15 Software terminación
SIGUSR1 16 Definida por el usuario una señal
SIGUSR2 17 Definida por el usuario señal 2
SIGCHLD 18 Niño cambio de estado de alias (POSIX)
Ausente 19 - No poder reiniciar
SIGWINCH 20 Ventana de cambio de tamaño
SIGURG 21 Urgente zócalo condición
SIGPOLL / SIGIO 22 SIGPOLL acontecimiento haya tenido lugar o Enchufe de I / O posible
SIGSTOP 23 Stop (no puede ser capturado o ignorado)
SIGTSTP 24 Usuario detener pidió a la TTY
± 25 Detuvo el proceso ha continuado
SIGTTIN 26 Antecedentes TTY intentado leer
SIGTTOU 27 Antecedentes TTY intentado escribir
SIGVTALRM 28 Virtual temporizador expiró
SIGPROF 29 Perfiles de temporizador expiró
Ilimitado 30 CPU límite superado
SIGXFSZ 31 Excedió el tamaño del archivo límite
SIGWAITING 32 Proceso 'LWPs están bloqueadas
SIGLWP 33 Especial señal utilizada por el hilo de biblioteca
SIGFREEZE 34 Especial señal utilizada por el CPR
SIGTHAW 35 Especial señal utilizada por el CPR
SIGCANCEL 36 Thread cancelación de la señal utilizada por libthread
SIGLOST 37 Recursos perdidos
SIGRTMIN 38 Máxima prioridad en tiempo real la señal
SIGRTMAX 45 Prioridad más baja la señal en tiempo real


Referencias:
Man kill
http://www.iessacolomina.org/web_dfsi/desarrollo/senales.html
http://72.14.253.104/search?q=cache:m4-nAf1xc-UJ:trevinca.ei.uvigo.es/~nrufino/ep/Senales.doc+se%C3%B1ales+de+unix+y+significado&hl=es&ct=clnk&cd=1&client=opera
http://www.tech-faq.com/lang/es/unix-signals.shtml

No hay comentarios: