Les signaux sont destinés à fournir une forme rudimentaire de contrôle sur un processus, et non un mécanisme IPC. Les signaux ont plusieurs problèmes lorsqu'ils sont utilisés comme autre chose :
-
De nombreux appels système seront interrompus par un signal et nécessiteront un traitement spécial.
-
Par conséquent, une grande partie du code dans la nature n'est pas sécurisé.
-
Les signaux n'ont aucun type de contenu de données, sauf pour eux-mêmes. Cela les rend la plupart du temps inutiles comme méthode de transmission de messages.
-
Vous ne pouvez pas faire grand-chose dans un gestionnaire de signal.
-
Plus important encore, les signaux suivants du même type ne sont pas mis en file d'attente - ils sont fusionnés en une seule instance.
-
Plus important encore, il n'y a aucune garantie que les signaux soient livrés dans le même ordre qu'ils ont été générés . À partir de la page de manuel :
En revanche, si plusieurs signaux standard sont en attente pour un processus, l'ordre dans lequel ils sont livrés n'est pas spécifié .
Vous pourriez théoriquement être capable de mettre en place une sorte de canal en utilisant plusieurs signaux allant et venant, certains agissant comme une sorte de reconnaissance, mais aucune personne sensée ne voudrait tenter quelque chose comme ça. Autant utiliser des signaux de fumée à la place...
Est-il possible de faire de l'IPC (communication inter-processus) en utilisant la capture de signal et l'augmentation de signal ?
Oui et non. En considérant uniquement les signaux, vous pouvez envoyer un signal à un autre processus, mais vous ne pouvez rien envoyer d'autre qu'un simple signal.
Je veux passer des messages avec ce signal aussi. Puis-je le faire? C'est possible ?
Non, pas comme vous essayez de le faire. Vous pouvez utiliser des sockets, des fichiers, des canaux ou des canaux nommés pour ce faire. Si vous souhaitez en savoir plus sur UNIX IPC, lisez Programmation avancée dans l'environnement UNIX.
Non, n'essayez pas d'utiliser des signaux pour cela. Vous ne pouvez pas attacher de données supplémentaires avec des signaux autres que la structure siginfo. Le principal problème avec l'utilisation des signaux est que si peu sont sûrs. Vous devez éviter à peu près toutes les routines d'exécution C et vous assurer que le programme récepteur effectue des vérifications EINTR sur tous ses appels au noyau. La seule chose que vous pouvez dire à propos du moment où un signal se produit, c'est qu'il ne sera pas quand vous l'attendez (un peu comme l'Inquisition espagnole).
Je vous suggère de vous pencher sur les autres mécanismes IPC, tels que la mémoire partagée, les files d'attente de messages, les fifos (tubes nommés) et les sockets.