Una señal es una forma limitada de la comunicación entre procesos usada en el Unix, el Unix-como, y el otro POSIX - sistemas operativos obedientes. Esencialmente es una notificación asincrónica enviada a un proceso para notificarlo de un acontecimiento que ocurrió. Cuando una señal se envía a un proceso, el sistema operativo interrumpe el flujo normal de los procesos de la ejecución . La ejecución se puede interrumpir durante cualquier instrucción no atómica . Si el proceso ha colocado previamente a tratante de la señal del, se ejecuta esa rutina. Si no ejecutan al tratante de la señal del defecto.
Envío de señales
Mecanografiar ciertas combinaciones en el
terminal de control de un proceso corriente hace el sistema enviarle ciertas señales: Ctrl-c (en un Unixes más viejo, DEL) envía una señal de la internacional ( SIGINT ); por abandono, esto hace el proceso terminar.
Ctrl-z envía una señal de TSTP ( SIGTSTP ); por abandono, esto hace el proceso suspender la ejecución.
El Ctrl \ envía una señal PARADA ( SIGQUIT ); por abandono, esto hace el proceso terminar y la base de la descarga.
El
kill (la llamada de sistema 2) enviará la señal especificada al proceso, si los permisos permiten. Semejantemente,
la matanza del
(1) comando de permite que un usuario del envíe señales a los processses.
La llamada de sistema de
raise envía la señal especificada al proceso actual del .
Las excepciones tal como
división por cero o una violación de la segmentación generarán señales (aquí, el SIGFPE y el SIGSEGV respectivamente, que ambos causan a vaciado de memoria por abandono).
El núcleo puede generar una señal de notificar el proceso de un acontecimiento. Por ejemplo, el SIGPIPE será generado
cuando un proceso escribe a una pipa que ha sido cerrada por el lector; por abandono, esto hace el proceso terminar, que es conveniente al construir los shell pipelines
Manipulación de señales
Los tratantes de la señal pueden ser instalados con la llamada de sistema de la señal del
() . Si un tratante de la señal no está instalado para una señal particular, utilizan al tratante del defecto. Si no la señal se intercepta e invocan el tratante de la señal. El proceso puede también especificar dos comportamientos del defecto, sin crear a un tratante:
no hacer caso de la señal (SIG_IGN) y utilizar a tratante de la señal del defecto (SIG_DFL). Hay dos señales que no pueden ser interceptadas y ser manejadas: SIGKILL y SIGSTOP . La dirección de la señal es vulnerable a las
condiciones de raza porque las señales son asincrónicas, otra señal (incluso del mismo tipo) se puede entregar al proceso durante la ejecución de la señal que maneja rutina. La llamada del sigprocmask del
() se puede utilizar para bloquear y para desbloquear la entrega de señales.
Las señales pueden causar la interrupción de una llamada de sistema en curso, dejándolo al uso para manejar un recomenzar no transparante .
Relación con excepciones
ejecución de s del proceso un la 'puede dar lugar a la generación de una excepción del hardware, por ejemplo, si el proceso intenta dividir por cero o incurre en una falta TLB. En el Unix - como sistemas operativos, este acontecimiento
cambia automáticamente el contexto del procesador para comenzar a ejecutar a un tratante de la excepción del núcleo . Con algunas excepciones, tales como una avería de página, el núcleo tiene suficiente
información completamente a la manija del el acontecimiento y reasume la ejecución del proceso. En otras excepciones, sin embargo, el núcleo no puede proceder inteligente y debe en lugar de otro diferir la
operación de dirección de excepción al proceso de dislocación. Este
aplazamiento se alcanza vía el mecanismo de la señal, en donde el núcleo envía al proceso una señal que corresponde a la excepción actual. Por ejemplo, si un proceso intentara dividir por
cero en una CPU X86, una excepción del error de divisoria del sería generada y hacer el núcleo enviar la señal SIGFPE al proceso. Semejantemente, si el proceso intentara tener acceso a una dirección de memoria fuera de su
espacio de dirección virtual, el núcleo notificaría el proceso de esta violación vía una señal SIGSEGV . El trazado exacto entre los nombres de la señal y las excepciones es obviamente dependiente sobre la CPU, puesto que
los tipos de excepción diferencian entre las arquitecturas.
Lista de señales
La
sola especificación de Unix especifica las señales siguientes que se definen en
< Signal.h >: SIGABRT del - procesar el abortado SIGALRM del
- señal levantada por el SIGBUS -
error en el bus del
de la alarma del
: " tener acceso a la porción indefinida de object" de la memoria; el SIGCHLD - proceso hijo del
terminó, (*or continuo) el parado SIGCONT del
- continuar si el parado SIGFPE - excepción del
de la coma flotante: " operation" aritmético erróneo; el SIGHUP - SIGILL
del retraso - el SIGINT - SIGKILL del
de la instrucción ilegal del
de la interrupción - el SIGPIPE del
de la matanza - escribir a la pipa sin un de lectura SIGQUIT del
- el parado SIGSEGV - SIGSTOP
de la violación de la segmentación - parar el ejecutar temporalmente SIGTERM - SIGTSTP
de la terminación - el terminal SIGTTIN - proceso del
de la señal de parada de fondo que intenta leer (" in") SIGTTOU - proceso del
de fondo que intenta escribir (" out") el SIGUSR1 - 1 definido por el usario SIGUSR2
- 2 el definido por el usario SIGPOLL - pollable SIGPROF del
* del
* del acontecimiento - que perfilaba el contador de tiempo expiró el SIGSYS - maÌn SIGTRAP del
* del
* de Syscall - el SIGURG - datos urgentes del
de la trampa del rastro/del punto de desempate disponibles en el SIGVTALRM del
* del zócalo - señal levantada por el contador de tiempo que contaba tiempo virtual: " expired" virtual del contador de tiempo; SIGXCPU - límite del
* del tiempo CPU excedió el SIGXFSZ del
* - tamaño del archivo excedido límite Nota: Donde una sección es marcada por un asterisco, ésta denota una extensión de los interfaces de sistema (XSI) de X/Open. La fraseología en las cotizaciones añadidas con (SUS) denota la fraseología del SUS.
Ver también
< Signal.h > .
ZenithicKay Kendall