PROPAGER UN SIGNAL SIGINT DANS UNE CLASSE C++ (LINUX)

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 29 oct. 2006 à 22:35
sbnl31 Messages postés 6 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 2 novembre 2006 - 2 nov. 2006 à 18:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40087-propager-un-signal-sigint-dans-une-classe-c-linux

sbnl31 Messages postés 6 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 2 novembre 2006
2 nov. 2006 à 18:20
La commande 'kill -l' te donne la liste des signaux.
Pour tuer ton processus, 'kill -9 processus_number' envoie un SIGKILL.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 16:59
hum alors crtl-C et killer avec le gestionnaire de processus ( je parle sous unix ) c'est pas la mêm chose ? ça correspond aux différentes options de kill ( le programme ) c'est ça ?
sbnl31 Messages postés 6 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 2 novembre 2006
2 nov. 2006 à 16:05
Sous Unix, tu as toujours la possibilité d'effectuer un 'kill' sur ton processus et puis si ton code est correct, il doit sortir correctement.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 15:29
tu es en train de me dire que tu dis à l'OS "tkt je m'occupe de tout, si on tente de me killer laisse moi faire " ??? c'est pas méga dangereux ça ?? genre dans mon callback je fais rien du tout, ya de quoi embêter l'utilisateur ! je peux même plus faire ctrl alt suppr :/ ( ok, sous xp )
sbnl31 Messages postés 6 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 2 novembre 2006
2 nov. 2006 à 11:56
Mon gestionnaire de signal ne stoppe pas le programme, si tu commentes la ligne "m_stopLoop = 1;" et que tu recompiles, tu auras un ^C inactif.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 11:20
hum dès que je reboote sous Nux je teste, ça me paraît vraiment trop chelou ton histoire ... d'un autre côté vu que tu as testé .. :/
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
2 nov. 2006 à 11:19
Je vois tout à fait l'intérêt de gérer ça, ça permet de faire comme Word qui quand il a été killé, te propose une backup.
Là où je coince, c'est là:
new_sa.sa_handler = TestSIGINT::sigint_handler;
On est bien d'accord que c'est celle ligne ci qui te permet de définir TestSIGINT::sigint_handler comme la fonction à appeller lorsqu'il y a une sigint (un callback, quoi) ?
Mais après tu as:
void TestSIGINT::sigint_handler(int signo)
{
//write(1, "<<CTRL+C>>\n", 11);
m_stopLoop = 1;
};
et SI JE COMPRENDS BIEN (rien n'est moins sûr), après ce callback, le prog est stoppé ? donc c'est ici et seulement ici qu'il faut désallouer, sauvegarder et tout et tout ? vu que la fonction TestSIGINT::loop() ne sera plus appellée ? ....
sbnl31 Messages postés 6 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 2 novembre 2006
2 nov. 2006 à 09:41
Le gestionnaire de signal par défaut stoppe brutalement ton programme. L'avantage de ton propre signal est de nettoyer, sauvegarder avant de sortir (sauvegardes de tes données dans l'application par exemple). Qui dit C++ dit objet, encapsulation et interface. On pourrait ainsi écrire un wrapper qui avertit une liste d'objet qu'un ^C a été envoyé à l'application sans se préoccuper de ce que chaque objet doit faire dans ce cas.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
29 oct. 2006 à 22:35
Aucun Dtor n'est appellé après un ctrl-c ? c'est tellement brute-force ?
Et je comprends pas bien ... pourquoi ne pas désallouer toutes tes ressources dans SignalHandler , et ensuite, à dieu vat ? vu que c'est la dernière fonction qui sera appellée ( apparement ... moi jdis ça ... )
Rejoignez-nous