Application recevant SIGINTs mystérieux
-
23-08-2019 - |
Question
Nous avons une petite application de démon écrit en C pour un couple de différentes plates-formes UNIX (ce problème se produit dans SunOS 5.10), que fondamentalement juste ouvre un port série, puis écoute les informations à venir via ledit port.
Dans ce cas particulier, le démon semble lire une seule transmission (comme la valeur d'un fichier de données) envoyées sur via le port série, il reçoit un SIGINT. Cela se produit à chaque fois. D'autres clients utilisent cette configuration de façon très similaire sans recevoir le SIGINT. Bien évidemment, les utilisateurs ne pas appuyer sur Ctrl-C. Nous avons un gestionnaire de signal relativement simple en place, donc nous savons pertinemment que c'est ce qui se passe.
Que pourrait être la cause? Googler autour et en regardant à travers les questions ici, je ne pouvais pas trouver beaucoup d'explications à d'autres choses qui pourraient causer un SIGINT. J'ai aussi regardé le code et trouvé aucun appel à lever () et seulement un seul appel à tuer (pid, 0) qui ne serait pas envoyer un SIGINT de toute façon.
Toutes les pensées ou des idées serait certainement apprécié.
La solution
Si vous ne voulez pas que le port série pour devenir le terminal de contrôle du processus, l'ouvrir en utilisant le open
drapeau O_NOCTTY
. Si c'est le terminal de contrôle, les données du port série peuvent être interprétées comme une interruption ou un autre caractère spécial.
Autres conseils
Vous ne dites pas comment votre gestionnaire de signal est attaché, mais si vous êtes en mesure de le fixer à l'aide sigaction (2) pour obtenir un siginfo_t
il ressemble à qui inclurait le pid qui a envoyé le signal (si_pid
).