Bagaimana cara menentukan apakah file tertentu terbuka di Windows? [Tutup]

87

Salah satu alat favorit saya untuk linux adalah lsof - pisau tentara swiss asli!

Hari ini saya menemukan diri saya bertanya-tanya program mana pada sistem WinXP yang memiliki file tertentu terbuka. Apakah ada utilitas yang setara dengan lsof? Selain itu, file yang dipermasalahkan melewati jaringan bersama jadi saya tidak yakin apakah itu memperumit masalah.

Daniel Fone
sumber

Jawaban:

76

Gunakan Process Explorer dari Sysinternals Suite, fungsi Find Handle atau DLL akan memungkinkan Anda mencari proses dengan file terbuka.

Jay Hofacker
sumber
Apakah ini benar-benar menjawab pertanyaan itu? Process Explorer memungkinkan Anda melihat file mana yang terbuka untuk proses / pegangan / dll / apa pun, tetapi itu adalah pemetaan terbalik. Lihat jawaban saya stackoverflow.com/questions/15708/… untuk pertanyaan ini.
Greg Mattes
7
Ya, itu benar. Klik Find Handle atau Dll (atau tekan Ctrl-F), ketik nama file yang Anda cari, dan Anda akan mendapatkan daftar proses dengan file tersebut terbuka.
Jay Hofacker
Process Explorer sekarang telah diubah namanya dan digabungkan menjadi "Process Monitor".
Matthew McCullough
7
@MatthewMcCullough Ada referensi? Anda salah, Process Explorer dan Process Monitor adalah dua utilitas yang berbeda.
Alois Mahdal
2
Apakah Process Explorer memiliki antarmuka baris perintah?
Anderson Green
41

Setara dengan lsof -p pid adalah output gabungan dari sysinternals handle dan listdlls, ie

handle -p pid
listdlls -p pid

Anda dapat menemukan pid dengan sysinternals pslist.

peterh - Kembalikan Monica
sumber
Apakah ini datang dengan instalasi windows standar seperti Windows 10?
Morten
10

Coba Tangani . Filemon & Regmon juga bagus untuk mencoba mencari tahu apa yang dilakukan program duce foo pada sistem Anda.

slip
sumber
@slipsec FileMon dan Regmon sekarang digantikan oleh Process Monitor v3.2 pada versi Windows yang dimulai dengan Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1, dan Windows Vista.
Beruntung
7

Satu ekuivalen dari lsof dapat digabungkan dengan output dari handle dan listdlls Sysinternals , yaitu:

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

Sayangnya, Anda harus "menjalankan sebagai Administrator" untuk dapat menggunakannya.

Juga listdlls dan handle tidak menghasilkan bentuk seperti tabel kontinu sehingga nama file penyaringan akan menyembunyikan PID. findstr /c:pid: /c:<filename>akan membuat Anda sangat dekat dengan kedua utilitas tersebut

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
[...]

Di sini kita dapat melihat bahwa gvim.exe adalah yang membuka file ini.

Alois Mahdal
sumber
5

Coba Unlocker .

Situs Unlocker memiliki bagan yang bagus (gulir ke bawah setelah mengikuti tautan) yang menunjukkan perbandingan dengan alat lain. Jelas perbandingan seperti itu biasanya bias karena biasanya ditulis oleh pembuat pahat, tetapi bagan setidaknya mencantumkan alternatif sehingga Anda dapat mencobanya sendiri.

Greg Mattes
sumber
4
Unlocker hanya mencantumkan file yang dikunci, bukan file yang dibuka. Kebanyakan perangkat lunak Windows mengunci DLL yang digunakannya tetapi tidak dengan dokumen Anda.
Tobias
5

Jika file tersebut adalah .dll maka Anda dapat menggunakan aplikasi baris perintah TaskList untuk melihat siapa yang membukanya:

TaskList /M nameof.dll
Sean
sumber
3

Ada program "OpenFiles", tampaknya menjadi bagian dari windows 7. Tampaknya itu dapat melakukan apa yang Anda inginkan. Ini dapat membuat daftar file yang dibuka oleh pengguna jarak jauh (melalui berbagi file) dan, setelah memanggil "openfiles / Local on" dan sistem restart, itu harus dapat menampilkan file yang dibuka secara lokal. Yang terakhir dikatakan memiliki penalti kinerja.

anonim
sumber
1
Saya datang ke sini mencari cara untuk mengetahui siapa yang mencegah saya menghapus folder dan menghindari restart, dan saya menemukan perintah yang saya perlukan memerlukan konfigurasi konfigurasi yang ... Anda dapat menebaknya .... memerlukan restart. Bagaimana sangat jendela.
Gus
teman-teman, ketahuilah bahwa perintah openfiles membutuhkan waktu lama untuk dijalankan (dengan urutan 4 menit)!
NH.
2

Jika Anda mengklik kanan ikon "Komputer" (atau "Komputer Saya") dan memilih "Kelola" dari menu pop-up, Anda akan dibawa ke konsol Manajemen Komputer.

Di sana, di bawah System Tools \ Shared Folders, Anda akan menemukan "Open Files". Ini mungkin mendekati apa yang Anda inginkan, tetapi jika file tersebut berada di jaringan bersama maka Anda harus melakukan hal yang sama di server tempat file tersebut berada.

Matt Hamilton
sumber
3
Perhatikan bahwa ini hanya menampilkan file bersama yang dibuka oleh pengguna jaringan lain. Itu tidak membantu menemukan file yang terbuka di sistem lokal. Melakukan ini di server mungkin akan memberi tahu Anda pengguna mana yang membuka file, tetapi bukan program mana di mesin pengguna itu. Process Explorer (seperti yang disebutkan oleh @JayHofacker) bekerja dengan baik untuk saya.
tomlogic
2

Gunakan Process Explorer untuk menemukan id proses. Kemudian gunakan Handle untuk mengetahui file apa saja yang terbuka.

Misalnya pegangan -p

Saya suka pendekatan ini karena Anda menggunakan utilitas dari Microsoft itu sendiri.

pushNpop
sumber
seandainya kita memiliki kode sumber untuk itu
greywolf
2

Di OpenedFilesView , di bawah menu Options, ada item menu bernama "Show Network Files". Mungkin dengan itu diaktifkan, utilitas yang disebutkan di atas ada gunanya.

M8R-qpgep8
sumber