Señales En un sistema, los procesos que se ejecutan concurrentemente interactúan entre sí. Cuando varios procesos quieren acceder a los mismos recursos del sistema operativo, por ejemplo un dispositivo de entrada y salida. Para resolver esta situación, el SO dispone de un gestor de procesos que determina el orden de acceso a esos recursos; adicionalmente, cuenta con un mecanismo para poder enviar mensajes a los procesos. La necesidad de intercambiar información entre procesos es muy clara en las arquitecturas colaborativas, por ejemplo, en el modelo cliente-servidor, donde un proceso suministra información o servicios a otros procesos. Las señales pueden considerarse un tipo de mensajes, aunque, si se comparan con otros medios de comunicación de procesos (sockets, pipes, etc.), resultan un mecanismo más pobre, ya que no permiten transmitir datos. A pesar de ello, es importante conocerlas y saber manejarlas, pues proporcionan dos servicios fundamentales: La defensa del proceso establecida frente a incidencias comunicadas por el kernel, que envía señales al proceso cuando se ha producido alguna eventualidad. Si éstas no son gestionadas (bien ignoradas, bien capturadas) por el proceso al que van dirigidas, dan lugar a su inmediata conclusión, lo que puede redundar en una pérdida irrecuperable de datos. El mecanismo de comunicación entre dos procesos resulta útil y sencillo para avisar a un proceso de la aparición de eventos excepcionales, si bien no debe emplearse como forma habitual de comunicación entre procesos. Estas necesidades de comunicación entre procesos quedan satisfechas en aquellas en que el proceso pide al kernel que envíe una señal a otro proceso. El uso de señales es un método sencillo de aviso de incidencias (por circunstancias del propio proceso o por la intervención de otro proceso) entre el kernel y los procesos, y su aparición en el tiempo no puede ser prefijada, ya que suelen referirse a hechos imprevistos. Las señales son interrupciones de software que pueden enviarse a un proceso para proporcionar un método con el que tratar eventos asíncronos. Las interrupciones de software enviadas a un proceso pueden ser generadas por el kernel del sistema operativo, por el usuario desde la línea de comandos, o por cualquier otro proceso que conozca el pid del proceso. Las señales generadas por el kernel se producen cuando se detecta un error de software o de hardware en la ejecución del proceso. Las señales generadas por el usuario, se pueden producir al pulsar ciertas teclas. Para la generación de señales en un proceso, Se utilizan las funciones kill y killpg, con las que un proceso puede enviar señales a otro proceso o grupo de procesos. Como las señales pueden aparecer en cualquier instante, el proceso debe indicar al kernel qué es lo que ha de hacer cuando recibe una señal determinada. El kernel puede actuar de tres formas diferentes: ignorar la señal, capturarla o aplicar la rutina por defecto.