Come posso determinare se un file specifico è aperto in Windows? [chiuso]


87

Uno dei miei strumenti preferiti per Linux è lsof , un vero coltellino svizzero!

Oggi mi sono ritrovato a chiedermi quali programmi su un sistema WinXP avevano un file specifico aperto. Esiste un'utilità equivalente a lsof? Inoltre, il file in questione era su una condivisione di rete, quindi non sono sicuro che ciò complichi le cose.

Risposte:


74

Usa Process Explorer dalla Sysinternals Suite, la funzione Trova handle o DLL ti consentirà di cercare il processo con quel file aperto.


Questo risponde davvero alla domanda? Process Explorer ti consente di vedere quali file sono aperti per un particolare processo / handle / dll / qualunque, ma questa è la mappatura inversa. Vedi la mia risposta stackoverflow.com/questions/15708/… a questa domanda.
Greg Mattes,

6
Sì lo fa. Fai clic su Trova handle o Dll (o premi Ctrl-F), digita il nome del file che stai cercando e ti ritroverai con un elenco di processi con quel file aperto.
Jay Hofacker

Process Explorer è stato ora rinominato e raggruppato in "Process Monitor".
Matthew McCullough,

7
@ MatthewMcCullough Eventuali riferimenti? Non sei corretto, Process Explorer e Process Monitor sono due diverse utilità.
Alois Mahdal

2
Process Explorer dispone di un'interfaccia della riga di comando?
Anderson Green

41

L'equivalente di lsof -p pidè l'output combinato di sysinternals handle e listdlls, ie

handle -p pid
listdlls -p pid

puoi scoprire pid con sysinternals pslist.


Viene fornito con un'installazione standard di Windows come Windows 10?
Morten,

10

Prova a gestire . Filemon e Regmon sono ottimi anche per cercare di capire cosa sta facendo il programma duce foo al tuo sistema.


@slipsec FileMon e Regmon sono ora sostituiti da Process Monitor v3.2 nelle versioni di Windows a partire da Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 e Windows Vista.
Lucky

7

Un equivalente di lsof potrebbe essere combinato uscita dal Sysinternals' impugnatura e listdlls , ossia:

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

Sfortunatamente, devi "eseguire come amministratore" per poterli utilizzare.

Inoltre listdll e handle non producono una forma di tabella continua, quindi il filtraggio del nome del file nasconderebbe il PID. findstr /c:pid: /c:<filename>dovrebbe avvicinarti molto con entrambe le utility, però

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

Qui possiamo vedere che gvim.exe è quello con questo file aperto.


5

Prova Unlocker .

Il sito Unlocker ha un grafico elegante (scorri verso il basso dopo aver seguito il link) che mostra un confronto con altri strumenti. Ovviamente tali confronti sono generalmente di parte poiché sono tipicamente scritti dall'autore dello strumento, ma il grafico almeno elenca le alternative in modo che tu possa provarle tu stesso.


4
Unlocker elenca solo i file bloccati, non i file aperti. La maggior parte del software Windows blocca la DLL che utilizza ma non i documenti.
Tobias

5

Se il file è un .dll, puoi utilizzare l' app della riga di comando TaskList per vedere chi l'ha aperto:

TaskList /M nameof.dll

3

C'è un programma "OpenFiles", sembra essere parte di Windows 7. Sembra che possa fare quello che vuoi. Può elencare i file aperti da utenti remoti (tramite condivisione file) e, dopo aver chiamato "openfiles / Local on" e un riavvio del sistema, dovrebbe essere in grado di mostrare i file aperti localmente. Si dice che quest'ultimo abbia penalità sulle prestazioni.


1
Vengo qui cercando un modo per scoprire chi mi sta impedendo di eliminare una cartella ed evitare un riavvio, e trovo che il comando di cui ho bisogno richiede una configurazione di configurazione che ... hai indovinato .... richiede un riavvio. Come molto windows.
Gus

gente, siate consapevoli che il comando openfiles richiede molto tempo per essere eseguito (nell'ordine di 4 minuti)!
NH.

2

Se fai clic con il pulsante destro del mouse sull'icona "Computer" (o "Risorse del computer") e selezioni "Gestisci" dal menu a comparsa, verrai reindirizzato alla console di gestione del computer.

Lì, in Strumenti di sistema \ Cartelle condivise, troverai "Apri file". Questo è probabilmente vicino a quello che vuoi, ma se il file si trova su una condivisione di rete, dovresti fare la stessa cosa sul server su cui risiede il file.


3
Notare che questo mostra solo i file condivisi aperti da altri utenti della rete. Non aiuta a trovare i file aperti sul sistema locale. Fare questo sul server probabilmente dirà quale utente aveva il file aperto, ma non quale programma sulla macchina di quell'utente. Process Explorer (come menzionato da @JayHofacker) ha funzionato bene per me.
tomlogic

2

Usa Process Explorer per trovare l'ID del processo. Quindi utilizzare Handle per scoprire quali file sono aperti.

Ad esempio handle -p

Mi piace questo approccio perché utilizzi le utilità di Microsoft stessa.


se solo avessimo il codice sorgente per quelli
graywolf

2

In OpenedFilesView , sotto il menu Opzioni, c'è una voce di menu denominata "Mostra file di rete". Forse con quello abilitato, l'utilità di cui sopra è di qualche utilità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.