7
votes

Puis-je gérer le massacre de mon processus Windows via le gestionnaire de tâches?

J'ai une application Windows C ++ (App.exe). Lorsque l'application est fermée, j'ai besoin d'effectuer des tâches de nettoyage spécifiques à mon application. Que se passe-t-il lorsque ce processus (App.exe) est tué via le gestionnaire de tâches. En supposant que l'application soit toujours réactive, puis-je gérer en quelque sorte cette situation dans mon app.exe?

Je cherche quelque chose de similaire à la manière dont Kill à Linux enverra le signal SIGTERM au processus indiqué par PID. Je pourrais alors enregistrer mon propre gestionnaire de signal pour SIGTERM et effectuer le nettoyage.


0 commentaires

3 Réponses :


0
votes

Je pense que vous aurez besoin d'un autre PID qui surveillait le PID de votre App.exe et le fonctionnement nécessaire à l'époque.


0 commentaires

12
votes

Il existe deux façons de tuer l'application dans le gestionnaire de tâches.

  • TUERING à travers Applications L'onglet sera approximativement équivalent de sigterm . L'application peut l'intercepter et faire plus de traitement, car elle envoie essentiellement un message "Fermer la fenêtre". Message à attraper est wm_close .
  • Tuer à travers processus onglet serait d'environ un équivalent de SIGKILL . Vous ne pouvez rien faire pour intercepter cela, à compter de la surveillance des actions de l'utilisateur dans le bouton Listebox et de processus de fin de tâche, ou d'avoir un processus de surveillance qui verra lorsque le premier est tué.

    Alternativement, concevez l'application d'une manière qui ne nécessite pas de nettoyage ou de manière à effectuer le nettoyage au démarrage.


2 commentaires

Malheureusement, je ne peux pas repousser l'application. C'est une application héritée de 10 ans avec plusieurs milliers de lignes de code.


Remarque, googlers: il n'y a pas de wm_close dans une application de console, cependant. Vous devez appeler setConsolectrlhandler pour enregistrer votre gestionnaire pour traiter ctrl_close_event pour la fermeture (c'est-à-dire "sigterm").



0
votes

Cela dépend, si l'utilisateur choisit de "tâche finale", votre application vous sera informée et vous pouvez le gérer Voir ceci.

Mais si l'utilisateur choisit de mettre fin au processus, vous n'avez aucun moyen de le gérer dans votre application. Le moyen le plus simple serait un deuxième processus ou vous pouvez injecter dans le gestionnaire de processus et accrocher l'API de procédure de traitement.


0 commentaires