web-dev-qa-db-fra.com

Comment tuer un service suspendu sur Windows 2008R2

J'ai un serveur Windows 2008R2 exécutant NSCLIENT ++. Pour une raison quelconque, le service a obtenu ses culottes dans une torsion et arrêté de répondre à la scrutation Nagios.

Lorsque j'ai essayé de redémarrer le service, le gestionnaire de service prend beaucoup de temps pour essayer de tuer le service, puis éventuellement un message sur les lignes de "Le service a pris trop de temps pour répondre". Mais ... il commence également une nouvelle instance du service.

Si je regarde dans le gestionnaire de tâches ou si tasklist, je peux maintenant voir deux instances de nsclient++.exe en cours d'exécution.

J'ai essayé de tuer ces deux en utilisant:

  • cliquez avec le bouton droit de la souris et "processus de fin" dans le gestionnaire de tâches - prétendons tuer le processus et signale aucune erreur (par exemple, accès refusé), mais le processus est toujours là.

  • taskkill /PID <proc id> /F - Rapports SUCCESS: The process with PID 6672 has been terminated. Mais le processus est toujours en cours d'exécution.

  • sysinternals téléchargés Pstools et Ran pskill <PID> - Rapports Process <PID> killed - Pourtant, le processus est toujours là.

  • exécutez at hh:mm pskill <PID> pour obtenir pskill pour le faire comme compte SYSTEM ... et vous l'avez deviné, le processus est toujours en marche.

Tout ce qui précède a été exécuté dans une invite de commande administrateur.

Outre un redémarrage qui n'est pas vraiment idéal (la boîte est un serveur de production critique de mission assez missionnaire), que puis-je essayer d'autre?

Le serveur n'est pas sous une pression de ressource (mémoire, processeur, disque, etc.) et tout ce qui s'allume sur elle est de raccourcir tout simplement bien.

En ce qui concerne l'onglet Threads dans Sysinternals Process Explorer indique que toutes ces instances nsclient++.exe sont bloquées le déchargement:

enter image description here

Comme à l'écart, j'ai également essayé de tuer toutes les connexions TCP pour ces processus zombies (?) (Avec TCPView) dans l'espoir que je pouvais commencer une nouvelle instance et que cela serait capable de saisir le port 5666. Alors nous pourrait redémarrer le serveur lorsque les choses sont plus calmes, mais des hélas qui n'ont pas fonctionné.

8
Kev

Même si cela semble que vous l'avez déjà compris, le problème est que le processus attend sur le noyau pour quelque chose. (Il s'agit généralement d'un problème de niveau du conducteur, mais pas toujours.) Le seul moyen de tuer un tel processus est de décharger le noyau, ce qui, bien sûr, vous ne pouvez pas faire sans redémarrer.

Pourrait être utile d'essayer de déboguer du noyau ( cet outil fonctionne-t-il sur 2008 R2 ?) Dans l'espoir de rétrécir la cause ou le conflit spécifique, mais vos options de traitement du problème sont égales avec elle, soit redémarrer le serveur pour l'éliminer.

Y a-t-il une raison pour laquelle vous n'avez pas envisagé de vivre avec cela? Si c'est juste un processus de zombie et que cela n'a aucun impact, je penserais que vous pourriez remettre un redémarrage jusqu'à une fenêtre de maintenance ou plus opportun. En règle générale, mon approche, lorsque le processus de zombie ou suspendu n'interfère pas avec quoi que ce soit - prenez soin de cela lors du prochain cycle de correctif ou de la fenêtre de maintenance planifiée.

3
HopelessN00b