2009-10-17 3 views
2

J'ai un processus mixte avec le code natif et géré, en cours d'exécution sur Windows Server 2003.Que se passe-t-il exactement quand mon processus est tué?

Lorsque je tue mon processus à partir de l'explorateur de processus, il entre dans un état de cpu 100% et reste comme ça pendant un certain temps (parfois même 10 minutes) avant de partir. Pendant ce temps, je ne peux pas "tuer" ou faire autre chose. Qu'est-ce qui peut arriver à un processus quand je le tue par processus via la destruction de l'explorateur de processus? Je crois que cela n'appelle pas de destructeurs, alors qu'est-ce qui pourrait causer une telle utilisation du processeur?

Merci, Dan

+1

Est-ce que c'est sur Vista/Win7? –

+1

Il a dit 'Windows Server 2003'. – Jim

+0

Désolé, raté ça, merci. Avez-vous le même comportement avec d'autres outils comme kill.exe du kit de ressources, taskkill.exe avec l'option/F ou pskill.exe? –

Répondre

1

Essayez en utilisant Terminer le processus (sur l'onglet Processus) du Gestionnaire des tâches à la place, et essayer de s'il y a une différence si vous choisissez l'arborescence du processus kills de chaque Gestionnaire des tâches ou Process Explorer de Winternal, mais je doute que ça va aider.

Le processus est censé être tué (presque) instantanément, cependant, il y a des façons sournoises de rester collées. Si vous avez écrit votre propre application, je suppose que ce n'est pas le cas. Il est plus que probable que d'autres processus n'aiment pas que le vôtre soit enlevé. Réglez Process Monitor sur la vitesse d'actualisation rapide et triez la colonne cpu. Vous devriez maintenant voir quel processus cause le problème de 100%. Très probablement: système.

Dans le cas où vous utilisez beaucoup de mémoire, esp. Lorsque c'est globalement plus que la mémoire physique, le système se réorganise (c'est-à-dire, déplace la mémoire du disque vers la mémoire physique). Un comportement similaire se produit (jusqu'à congeler mon système) lorsque je tue Firefox après avoir ouvert plus de 500 onglets, occupant 1,5 Go de mémoire. Ce comportement (réorganisation lente de la mémoire) s'est amélioré avec les versions ultérieures de Microsoft Windows.

MISE À JOUR: en interne, proc expl. appelle TerminateProcess (entre autres), qui ferme tous les handles et threads. MSDN API ref dit "TerminateProcess lance la terminaison et renvoie immédiatement.Cela arrête l'exécution de tous les threads dans le processus et demande l'annulation de toutes les E/S en attente.Le processus terminé ne peut pas quitter tant que toutes les E/S en attente ont été terminées ou annulées.. Ce qui signifie que: vos E/S peuvent bloquer ce processus (bien que je me demande comment cela peut amener votre processus à 100%, les E/S ne le font généralement pas).

+0

Je suis sûr que c'est mon processus qui prend 100% CPU, et pas un autre processus. La mémoire reorg. semble intéressant - je vais regarder dans cela. Merci – DanJ

0

Si vous avez plusieurs threads, ou d'autres ressources qui n'ont pas été libérées, il se peut qu'il essaie d'attendre que tout soit libéré avant que l'application ne soit détruite. Lorsque votre application est supprimée, idéalement, toutes les ressources utilisées seront libérées, mais c'est pourquoi vous devez vous assurer que vous implémentez l'interface IDispose, pour éviter cela. ouvrir qui ne peut pas être rouvert, et votre seule option est de redémarrer. Est-ce que cela se produit lorsque vous essayez de tuer d'autres applications, ou juste celle-ci? Vous voudrez peut-être simplifier votre programme, ou essayer de le tuer avant qu'il n'utilise trop de ressources, et voir si vous pouvez déterminer à quel moment vous rencontrerez ce problème, et alors vous aurez une meilleure idée de ce que vous avez fait cela provoque ce comportement.

+0

si une application est tuée de cette façon, les objets IDisposable ne sont plus appelés, toutes les ressources (poignées d'objets) sont fermées par force. – Abel

0

Pourriez-vous regarder les discussions dans Process Explorer? Voyez ce qui fonctionne et en particulier ce qui prend 100% CPU. Voyez si vous pouvez trouver la pile d'appels et isoler le fil spécifique ou même la fonction. Postez la réponse ici si vous le pouvez!

+0

L'Explorateur de processus ne peut pas récupérer la pile du thread après avoir arrêté le processus. – DanJ

1

Évidemment quelque chose essaie de continuer à fonctionner, ce qui provoque la condition de blocage/blocage que vous voyez. Je pourrais essayer d'expliquer comment utiliser certains outils pour essayer de savoir ce qui se passe, mais je devrais probablement juste vous renvoyer au maître ... Tess - Lab on High CPU Hang

J'ai été capable d'utiliser les méthodes qu'elle décrit pour résoudre les problèmes avec mes propres applications.

0

Mon débogueur psychique est que vous avez encore beaucoup de ressources allouées (c'est-à-dire des gestionnaires de fichiers/reg, des objets win32k, etc.) et que le noyau les nettoie. Lorsque vous utilisez Process Explorer pour accéder à l'application, l'utilisation des ressources semble-t-elle élevée?

+0

L'utilisation des ressources semble normale, mais il semble que quelque chose me manque. Mémoire, poignées, fils, tout va bien. D'autres ressources que je devrais rechercher? – DanJ

Questions connexes