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é.

Était-ce utile?

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).

J'ai trouvé un sur le débogage d'un problème avec des symptômes similaires. Bien que je doute que ce soit la même question, il a obtenu quelques conseils de débogage très utiles pour retracer l'origine des signaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top