Question

J'ai surchargé les 6 signaux répertoriés sur ce site http: // www. cplusplus.com/reference/clibrary/csignal/signal.html

Ensuite, j'ai lancé mon application (double-clic non exécuté via IDE) et essayé 1) de terminer la tâche 2) X sur le droit et 3) de tuer le processus. Je m'attendais à ce que les deux premiers causent une sorte de signal (je suis sur XP) mais hélas je n'ai rien eu. Est-ce que je ne suis pas autorisé à ouvrir des fichiers dans lesquels écrire lorsqu'un signal se produit? Je suppose que je suis (SIGSEGV m'a permis).

Lorsque Firefox tombe en panne ou lorsque je le tue, il se souvient des pages que j’étais. Enregistre-t-il l'adresse chaque fois que je clique sur une page ou le fait-il sur un signal / blocage?

ma question principale est quel signal puis-je utiliser pour intercepter le processus de destruction

Était-ce utile?

La solution

Win32 ne fournit pas d’option permettant d’intercepter votre programme en cours de suppression avec TerminateProcess (ce qui se produira si vous & mettez fin à la tâche & depuis le gestionnaire de tâches ou cliquez sur le [X]). .

Vous pouvez intercepter le signal SIGSEGV car la bibliothèque d’exécution C fournit une émulation de ce signal sous Windows. Lorsque votre programme provoque une violation d'accès Windows (exception 0xC0000005), la bibliothèque d'exécution a la possibilité de la détecter et de simuler pour vous un fichier SIGSEGV de style Unix. Ce n'est toutefois pas la meilleure façon de gérer une telle exception. Si vous écrivez un programme Win32, vous ne devriez généralement pas essayer d’utiliser des services de style Unix.

Autres conseils

Vous pouvez intercepter une erreur d'exécution comme une violation d'accès si vous redéfinissez le gestionnaire d'exceptions par défaut appelant SetUnhandledExceptionFilter (il s'agit d'une fonction win32 et, en tant que telle, ne repose pas sur l'émulation de la bibliothèque C). C’est la méthode que vous pouvez utiliser pour fournir des & Quot; minidumps & "; quand un programme se bloque.

Mais ce gestionnaire d'exceptions ne sera pas appelé lorsque vous fermez normalement votre application ou lorsque votre application est fermée à partir du Gestionnaire de tâches. Dans le dernier cas, Windows appelle TerminateProcess, n’est pas un arrêt complet, mais force le programme à s’arrêter.

Je ne sais pas quelle est l'implémentation utilisée par Firefox, mais pour enregistrer les onglets actuellement ouverts, il est probable qu'un minuteur fonctionne, et chaque fois qu'il est exécuté, il enregistre l'historique dans un fichier et une sorte de fichier sale. marque.

D'autres solutions plus complexes pour détecter la fermeture d'un programme (implémentée par un antivirus et des programmes similaires) consistent à exécuter deux programmes indépendants, chacun vérifiant que l'autre est toujours en cours d'exécution. Si l'une détecte l'autre, elle est fermée. encore.

Les applications Windows sont des applications de console ou des applications à interface graphique. Les applications console ont tendance à recevoir WM_CLOSE, les applications console CTRL_CLOSE_EVENT. Les signaux ne sont pas non plus; aucun ne serait envoyé si votre application est terminée via TerminateProcess ().

Si vous souhaitez enregistrer où vous vous trouviez, utilisez un fichier mappé en mémoire et mettez-le à jour à chaque action. Lorsque votre processus se termine, la page sale en mémoire est réécrite dans le fichier par le système d'exploitation, éventuellement à d'autres moments également. Cette solution permet au système d’exploitation de gérer les E / S du disque pour vous, et il est mieux placé pour le faire.

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