Vraiment tuer un processus dans Windows

375

Parfois, un programme sur une machine Windows devient fou et se bloque simplement. Je vais donc appeler le gestionnaire de tâches et appuyer sur le bouton "Terminer le processus" pour cela. Cependant, cela ne fonctionne pas toujours; si je l'essaye suffisamment de fois, il finira généralement par mourir, mais j'aimerais vraiment pouvoir le tuer immédiatement. Sous Linux, je pourrais simplement kill -9garantir qu'un processus va mourir.

Cela pourrait également être utilisé pour écrire des scripts batch et écrire des scripts batch est en cours de programmation.

Existe-t-il un programme ou une commande fourni avec Windows qui tuera toujours un processus? Une application tierce gratuite serait bien, même si je préfère pouvoir le faire sur des machines auxquelles je m'assois pour la première fois.

Eli Courtwright
la source
19
Les processus parasites sont un problème assez courant dans la programmation que je dois être en désaccord; ce n'est pas une question hors sujet.
Dan Moulding du
19
Je m'occupe quotidiennement de la gestion des processus en tant que développeur. C'est tout à fait un sujet pour moi!
John Fitzpatrick
14
Je déconseille fortement de supprimer cette question. +195 et c'est un coup de google très tôt pour la question impliquée.
Joshua
2
"à moins qu'ils n'impliquent directement des outils utilisés principalement pour la programmation", j'ai rencontré ce problème en ce qui concerne Visual Studio qui maintient un processus en cours d'exécution qui m'a empêché de le tuer. La fermeture de Visual Studio a aidé à tuer le processus problématique.
Joakim
Vous pouvez utiliser l' applet de commande PowerShell Stop-Process .
Rosberg Linhares

Réponses:

318

"Terminer le processus" sur les appels de l'onglet Processus, TerminateProcessqui est le moyen le plus ultime pour Windows de tuer un processus.

S'il ne disparaît pas, il est actuellement verrouillé en attente d'une ressource du noyau (probablement un pilote buggé) et il n'y a rien (à part un redémarrage) que vous puissiez faire pour faire disparaître le processus.

Jetez un œil à cette entrée de blog depuis le chemin du retour lorsque: http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

Les systèmes basés sur Unix comme Linux ont également ce problème où les processus peuvent survivre kill -9s'ils sont dans ce qui est connu sous le nom de "sommeil sans interruption" (indiqué par top et ps comme état D) à quel point les processus dorment si bien qu'ils ne peuvent pas traiter les signaux entrants (ce qui killfait - envoyer des signaux).

Normalement, le sommeil sans interruption ne devrait pas durer longtemps, mais comme sous Windows, les pilotes cassés ou les programmes de l'espace utilisateur cassés ( vforksans exec) peuvent finir par dormir pour Dtoujours.

pilif
la source
29
Bien que je déteste que ce soit la bonne réponse, il ne fait aucun doute dans mon esprit qu'elle est plus correcte que taskkill ci-dessous .... pilotes de buggy stupides!
codetaku
6
Un peu moins ennuyeux qu'un redémarrage consiste à se déconnecter / se reconnecter. Perdre encore du travail, mais peut-être pas autant de temps.
awidgery
8
cela est dû à un autre processus qui garantit que le processus initial est toujours en cours d'exécution. Vous avez tué votre ancienne instance et une nouvelle a été lancée par le chien de garde
pilif
8
Cette réponse n'est pas correcte du tout. "End Process" n'est pas le moyen le plus ultime de tuer les processus, car il ne peut pas tuer les processus de service (par exemple). taskkill /fest le plus ultime.
user626528
5
TaskKill / f appelle uniquement l' TerminateProcessAPI. Il fait exactement la même chose que le Gestionnaire des tâches (cependant, vous avez raison, avec des privilèges élevés).
pilif
233
taskkill /im myprocess.exe /f

Le "/ f" est pour "forcer". Si vous connaissez le PID, vous pouvez le spécifier, comme dans:

taskkill /pid 1234 /f

Beaucoup d'autres options sont possibles, tapez simplement taskkill /? pour chacun d'eux. L'option "/ t" tue un processus et tous les processus enfants; cela peut vous être utile.

JosephStyons
la source
10
Juste une note. Cela est particulièrement utile si vous écrivez des scripts pour la gestion des serveurs. kill.exe (à partir du kit NT Res) entraînera la fermeture d'un programme, mais si un gestionnaire de plantage est installé (en particulier windbg), il peut provoquer des problèmes car le système d'exploitation verra le processus interrompu se bloquer et tentera de déboguer il. Taskkill n'entraînera pas ce problème.
Aaron
6
@lzprgmr - taskkill et "end task" appellent probablement tous deux la même fonction Windows sous-jacente "TerminateProcess" msdn.microsoft.com/en-us/library/windows/desktop/…
JosephStyons
60
Ce n'est pas plus efficace que "terminer le processus" du gestionnaire de tâches.
Eddie
2
J'ai essayé de tuer SugarSync.exe de force sans avoir à redémarrer (depuis le redémarrage de SugarSync deux fois avant qu'il ne démarre vraiment, cela fonctionne à nouveau), mais taskkill / T / F / IM SugarSync.exe ne fonctionne pas - même si il réclame "SUCCÈS"
Jon Coombs
2
MERCI! taskkill /pid 1234 /ffonctionne quand End Task refuse de travailler! HOU LA LA!
Hendy Irawan
37

Process Hacker a de nombreuses façons de tuer un processus.

(Cliquez avec le bouton droit sur le processus, puis accédez à Divers-> Terminator.)

user541686
la source
5
Je ne trouve pas grand-chose sur le chemin de la corroboration, car la recherche de cela ne donne que des millions de TÉLÉCHARGEMENT GRATUIT !!! liens. Mais il fait ce qu'il dit, les risques de virus et tout.
bwerks
2
@Nuzzolilo: Bien sûr! Cliquez avec le bouton droit sur le processus, accédez à Divers-> Terminator.
user541686
6
Ne fonctionne pas sur tous les processus, j'en ai eu un qui a survécu à toutes les options.
Zitrax
7
Cela a bloqué l'écran de mon ordinateur. Le processus s'est arrêté après le redémarrage. Bon travail ... -.- '
Pedro Oliveira
5
Malheureusement, Terminator est supprimé dans la v2.39 :(
raymai97
23

JosepStyons a raison. Ouvrez cmd.exe et exécutez

taskkill /im processname.exe /f

S'il y a une erreur disant,

ERREUR: le processus "process.exe" avec le PID 1234 n'a pas pu être interrompu. Motif: l'accès est refusé.

essayez ensuite d'exécuter cmd.exe en tant qu'administrateur.

Dhruv Chandhok
la source
9
En cours d'exécution en tant qu'administrateur, l'erreur change. Il dit maintenant: ERROR: The process with PID 17888 (child process of PID 17880) could not be terminated. Reason: There is no instance of the task.et il fait référence au parent PID 17880. Comme il ne peut pas trouver le parent, il ne tuera pas l'enfant orphelin. :(
Jesse Chisholm
1
"vous devez également tuer le processus enfant s'il en a engendré un pour réussir votre processus" essayez ce stackoverflow.com/questions/12528963/…
Dhruv Chandhok
Dans mon cas, le processus de zombie que je lui ai dit de tuer était le seul enfant et il n'y avait pas de parent, même si le zombie pensait toujours qu'il avait un parent. Dans mon cas, résolu en utilisant le chemin d'accès du système de réparation avancée des paramètres de Windows 8.1, mais en annulant l'effacement de tout disque et en effectuant simplement un redémarrage forcé complet. L'arrêt et le redémarrage réguliers sont vraiment veille / hibernation (pour gagner du temps au démarrage). Non trivial pour qu'il fasse un arrêt complet .
Jesse Chisholm
"Accès refusé" signifie que le processus est déjà en cours de clôture. Par exemple, si vous venez de tenter de le fermer plus tôt. Vous devrez attendre sa fermeture.
Pacerier
résultats de taskkill sous les droits d'administrateur: l'accès est refusé.
amuliar
22

Obtenez l'explorateur de processus de sysinternals (maintenant Microsoft)

Process Explorer - Windows Sysinternals | Microsoft Docs

Iain Holder
la source
15
Cela fournit plus d'informations (et une capacité limitée à rechercher des poignées de verrouillage), mais je n'ai pas réussi plus à tuer des tâches avec lui qu'avec le gestionnaire de tâches de base. Certains processus (comme l'antivirus et SugarSync.exe) refusent tout simplement de mourir.
Jon Coombs
15

Une astuce qui fonctionne bien consiste à attacher un débogueur, puis à quitter le débogueur.

Sur XP ou Windows 2003, vous pouvez le faire en utilisant ntsd qui est livré prêt à l'emploi:

ntsd -pn myapp.exe

ntsd ouvrira une nouvelle fenêtre. Tapez simplement 'q' dans la fenêtre pour quitter le débogueur et retirer le processus.

Je sais que cela fonctionne même lorsque le gestionnaire de tâches ne semble pas capable de tuer un processus.

Malheureusement, ntsd a été supprimé de Vista et vous devez installer les outils de débogage (gratuits) pour Windows pour obtenir un débogueur approprié.

Rob Walker
la source
1
Merci beaucoup pour cela. Ajoutez "-c q" (sans guillemets) à la fonction Autoquit, ce qui en fait un tueur de processus idéal.
Joanis
2
Lorsque Visual Studio et une application en cours de débogage se bloquent, attachez et tuez l'ancienne instance de VS. Le tueur peut être une nouvelle instance de VS, qui peut ensuite ouvrir l'ancien projet et vous permettre de continuer à travailler.
Bruno Martinez du
Je ne sais pas comment télécharger quoi que ce soit à partir de ce lien autre que winsdk_web.exe, ce qui ne fait rien.
endolith
Vous pouvez maintenant l'obtenir dans le SDK Windows 10 en exécutant le programme d'installation puis en décochant tout sauf "Outils de débogage pour Windows" ( docs.microsoft.com/en-us/windows-hardware/drivers/debugger/… )
Coburn
6

configurez une commande AT pour exécuter le gestionnaire de tâches ou l'explorateur de processus en tant que SYSTEM.

AT 12:34 /interactive "C:/procexp.exe"

Si l'explorateur de processus était dans votre lecteur racine C, cela l'ouvrirait en tant que SYSTEM et vous pourriez tuer n'importe quel processus sans obtenir d'erreurs d'accès refusé. Réglez-le pendant une minute à l'avenir, puis il apparaîtra pour vous.

David Ruark
la source
4
J'obtiens l'avertissement suivant lorsque j'essaie, cela semble donc ne plus fonctionner: "Avertissement: en raison des améliorations de la sécurité, cette tâche s'exécutera à l'heure prévue mais pas de manière interactive. Utilisez l'utilitaire schtasks.exe si une tâche interactive est requise ('schtasks /? 'pour plus de détails). "
WhiteKnight
0

Lorsque l'accès ntsd est refusé, essayez:

ZeroWave a été conçu pour être un outil simple qui fournira une terminaison à plusieurs niveaux de tout type de processus.

ZeroWave est également un programme facile à utiliser en raison de sa simplicité d'installation et de son interface graphique très conviviale.

ZeroWave a trois modes de terminaison et avec le mode "INSANE" peut mettre fin à tout type de processus pouvant s'exécuter sur Windows.

Il semble que ZeroWave ne puisse pas tuer avp.exe

bricolage
la source
0

Pour info vous pouvez parfois utiliser SYSTEM ou Trustedinstaller pour tuer des tâches;)

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"
RmccurdyDOTcom
la source