Las señales están destinadas a proporcionar una forma rudimentaria de control sobre un proceso, no como un mecanismo IPC. Las señales tienen varios problemas cuando se usan como cualquier otra cosa:
-
Muchas llamadas al sistema serán interrumpidas por una señal y necesitarán un manejo especial.
-
En consecuencia, una gran cantidad de código en la naturaleza no es seguro para señales.
-
Las señales no tienen ningún tipo de contenido de datos, excepto por sí mismas. Esto los hace casi inútiles como método de paso de mensajes.
-
No hay mucho que puedas hacer en un controlador de señales.
-
Lo que es más importante, las señales posteriores del mismo tipo no se ponen en cola:se combinan en una sola instancia.
-
Aún más importante, no hay garantía de que las señales se entreguen en el mismo orden en que se generaron . Desde la página del manual:
Por el contrario, si hay varias señales estándar pendientes para un proceso, no se especifica el orden en que se envían .
Podrías teóricamente ser capaz de configurar algún tipo de canal usando varias señales que van y vienen, con algunas actuando como algún tipo de reconocimiento, pero ninguna persona en su sano juicio querría intentar algo así. También podrías usar señales de humo en su lugar...
¿Es posible hacer IPC (comunicación entre procesos) utilizando captura de señal y aumento de señal?
Si y no. Teniendo en cuenta solo las señales, puede enviar una señal a otro proceso, pero no puede enviar nada más que solo una señal.
Quiero pasar mensajes con esta señal también. ¿Puedo hacerlo? ¿Es posible?
No, no de la forma en que lo intentas. Puede usar sockets, archivos, conductos o conductos con nombre para hacer esto. Si desea obtener más información sobre UNIX IPC, lea Programación avanzada en el entorno UNIX.
No, no intentes usar señales para esto. No puede adjuntar datos adicionales con señales que no sean la estructura signinfo. Sin embargo, el principal problema con el uso de señales es que muy pocas señales son seguras. Debe evitar casi todas las rutinas de tiempo de ejecución de C y asegurarse de que el programa receptor realice verificaciones EINTR en todas sus llamadas al kernel. Lo único que puedes decir sobre cuando se produce una señal es que no será cuando lo esperas (un poco como la Inquisición española).
Le sugiero que busque en los otros mecanismos de IPC, como memoria compartida, colas de mensajes, fifos (tuberías con nombre) y sockets.