645 votes

Comment trouver le processus qui maintient un fichier ouvert dans Windows ?

Une chose qui m'agace au plus haut point avec Windows est la vieille violation du partage erreur. Souvent, vous ne pouvez pas identifier ce qui la maintient ouverte. En général, il s'agit simplement d'un éditeur ou d'un explorateur qui pointe vers un répertoire pertinent, mais il m'est arrivé de devoir redémarrer ma machine.

Des suggestions sur la façon de trouver le coupable ?

21 votes

On pourrait penser qu'après tout ce temps, les gars de Windows nous donneraient un moyen de faire cela facilement à partir de l'Explorer. Je me demande pourquoi cela n'a pas été fait ?

12 votes

Je trouve qu'Explorer est très souvent le processus problématique qui retient un fichier sans raison évidente.

0 votes

Je sais que cela ne vous aidera pas beaucoup, mais je crois me souvenir que c'était une fonctionnalité prévue pour la prochaine version de Windows après vista et 2008 server. ou peut-être que c'est un truc de WinFS. je ne sais plus où j'ai lu ça...

521voto

Eddie Points 11262

J'ai eu du succès avec Sysinternals Explorateur de processus . Avec cela, vous pouvez chercher à trouver quel(s) processus a un fichier ouvert, et vous pouvez l'utiliser pour fermer le(s) handle(s) si vous le souhaitez. Bien entendu, il est plus sûr de fermer l'ensemble du processus. Faites preuve de prudence et de discernement.

Pour trouver un fichier spécifique, utilisez l'option de menu Find->Find Handle or DLL... Tapez une partie du chemin d'accès au fichier. La liste des processus apparaîtra ci-dessous.

Si vous préférez la ligne de commande, la suite Sysinternals comprend un outil de ligne de commande Poignée qui énumère les poignées ouvertes.

Exemples

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "e:\" (trouve tous les fichiers ouverts à partir du lecteur e:\ "
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "file-or-path-in-question"

22 votes

Vous pouvez fermer la poignée, mais gardez à l'esprit qu'il s'agit de couper l'herbe sous le pied d'une application et que les résultats seront, au mieux, imprévisibles.

13 votes

@Walden : Absolument. YMMV. Avec WinXP, il m'est arrivé à plusieurs reprises qu'Explorer ouvre un handle sans raison évidente et refuse de le fermer. Lorsque cela se produit sur un fichier que vous devez supprimer, vous avez le choix entre forcer la fermeture du handle ou redémarrer. Jusqu'à présent, après l'avoir fait des dizaines de fois, je n'ai subi aucun effet négatif. Comme avec tout outil avancé, utilisez-le avec prudence et discernement.

6 votes

La fermeture des handles peut amener l'application à réutiliser le handle sur un autre fichier, provoquant une corruption - voir la réponse de Jeff ci-dessous : serverfault.com/a/15695/79266 ... beaucoup plus sûr de tuer l'application qui maintient le fichier ouvert, si vous ne voulez pas redémarrer.

323voto

Tryke Points 605

Vous pouvez utiliser le Moniteur de ressources pour ce qui vient intégré avec Windows 7, 8 et 10.

  1. Ouvrir Moniteur de ressources qui peut être trouvé
    • En cherchant Moniteur de ressources o resmon.exe dans le menu de démarrage, ou
    • Comme un bouton sur le Performance dans votre Gestionnaire des tâches
  2. Allez à la CPU onglet
  3. Utilisez le champ de recherche dans le Poignées associées section
    • Voir la flèche bleue dans la capture d'écran ci-dessous

Lorsque vous avez trouvé la poignée, vous pouvez identifier le processus en regardant la colonne Image et/ou PID.

Vous pouvez alors essayer de fermer l'application comme vous le feriez normalement ou, si ce n'est pas possible, cliquez avec le bouton droit de la souris sur l'identifiant et arrêtez le processus directement à partir de là. C'est simple comme bonjour !

Resource Monitor screenshot

Copié de ma réponse originale : https://superuser.com/a/643312/62

4 votes

Il convient de noter qu'il peut être difficile de trouver ce programme sous Windows 8 - une recherche de " resmon.exe " devrait permettre de le localiser.

8 votes

@Kylotan, Arrêtez de perdre du temps à chercher. Exécutez simplement resmon directement à partir de cmd

1 votes

@Pacerier : Joli. Je ne suis pas habitué à ce que les choses soient dans le chemin de Windows.

106voto

benphane Points 180

Soyez très prudent avec la fermeture des handles ; c'est encore plus dangereux que vous ne le pensez, à cause du recyclage des handles - si vous fermez le handle du fichier, et que le programme ouvre quelque chose d'autre, le handle du fichier original que vous avez fermé peut être réutilisé pour ce "quelque chose d'autre". Et maintenant, devinez ce qui se passe si le programme continue, en pensant qu'il travaille sur le fichier (dont vous avez fermé l'identifiant), alors qu'en fait cet identifiant pointe maintenant vers autre chose.

voir Le message de Raymond Chen sur ce sujet

Supposons qu'un service d'indexation de recherche ait un fichier ouvert pour l'indexation mais qu'il soit temporairement bloqué. mais qu'il est resté temporairement bloqué et que vous voulez supprimer le fichier. (imprudemment) forcer la fermeture de la poignée. Le service d'indexation de recherche ouvre son afin d'enregistrer quelques informations, et le handle du fichier fichier supprimé est recyclé comme handle du fichier journal. L'opération de blocage l'opération bloquée se termine enfin, et le service d'indexation de recherche peut enfin fermer l'identifiant qu'il avait ouvert, mais il finit par fermer involontairement fermer l'identifiant du fichier journal.

Le service d'index de recherche ouvre un autre fichier, disons un fichier de configuration pour l'écriture afin qu'il puisse mettre à jour certains état persistant. L'identifiant du fichier d'enregistrement est recyclé en tant que pour le fichier de configuration. Le service d'index de recherche veut veut enregistrer des informations, il écrit donc dans son fichier journal. Malheureusement, le fichier journal a été fermé et l'identifiant a été réutilisé pour son fichier de configuration. de configuration. L'information enregistrée va dans le fichier de configuration, le corrompant.

Pendant ce temps, un autre handle que vous avez forcé à fermer a été réutilisé comme un handle mutex, qui est utilisé pour aider à empêcher les données d'être corrompues. Lorsque le gestionnaire de fichier d'origine est fermé, le gestionnaire de mutex est fermé et les protections contre la corruption des données sont perdues. Plus le site plus le service fonctionne, plus ses index sont corrompus. Finalement, quelqu'un remarque que l'index renvoie des résultats incorrects. Et quand vous essayez de redémarrer le service, il échoue parce que ses fichiers de configuration ont été corrompus.

Vous signalez le problème à la société qui fabrique le service d'index de recherche et ils déterminent que l'index a été corrompu, que le fichier journal a mystérieusement cessé d'être et le fichier de configuration a été écrasé par des déchets. Un certain un pauvre technicien se voit confier la tâche désespérée de comprendre pourquoi le service corrompt ses index et ses fichiers de configuration, sans savoir que le service que la source de la corruption est que vous avez forcé la fermeture d'un handle.

15 votes

Un avertissement important, ceci devrait être plus haut - un redémarrage est probablement mieux qu'un fichier corrompu silencieusement.

12 votes

+1 Cela me fera certainement réfléchir à deux fois avant de forcer la fermeture des poignées ! Il me semble étrange que Windows réutilise immédiatement le numéro d'une poignée fermée, plutôt que de continuer à incrémenter le numéro et de ne faire le tour que si nécessaire. Cela permettrait au moins de réduire considérablement les chances que ce problème se produise.

3 votes

@RichVel Terminer le processus coupable est probablement mieux qu'un redémarrage complet.

99voto

John Fouhy Points 1121

Essayez le openfiles commandement.

Il se peut que vous deviez activer la liste des fichiers ouverts localement en exécutant la commande suivante openfiles /local on et de redémarrer.

10 votes

+1 pour une commande intégrée, bien que j'utilise personnellement ProcessExplorer pour cela la plupart du temps.

0 votes

Vraiment utile.

8 votes

ERREUR : Le système cible doit fonctionner avec un système d'exploitation 32 bits.

29voto

graham.reeds Points 9363

J'ai utilisé Poignée avec succès pour trouver de tels procédés dans le passé.

4 votes

J'utilise cet outil en permanence. Si je n'arrive pas à éjecter une clé USB, je tape simplement "handle H :" (ou toute autre lettre de clé). Mieux encore, vous pouvez l'utiliser pour forcer la fermeture des handles.

0 votes

On m'a dit tellement de fois à l'OS que les réponses en lien seulement sont découragées. Avec cet article, je fais maintenant partie de ces puristes ;)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X