2008-08-19 15 views
75

私の好きなツールの1つはlsofです - 実際のスイス軍ナイフです!特定のファイルがWindowsで開いているかどうかを確認するにはどうすればよいですか?

今日私はWinXPシステム上のどのプログラムが特定のファイルを開いているのか疑問に思っていました。 lsofに相当するユーティリティはありますか?さらに、問題のファイルはネットワーク共有を介していたので、問題が複雑かどうかはわかりません。

答えて

61

Sysinternals SuiteのProcess Explorerを使用すると、Find HandleまたはDLL関数を使用して、そのファイルが開いているプロセスを検索できます。

+0

これは本当に質問に答えますか? Process Explorerを使用すると、特定のプロセス/ハンドル/ dll /その他のファイルが開いているファイルを確認できますが、これは逆のマッピングです。この質問に私の答えhttp://stackoverflow.com/questions/15708/lsof-equivalent-for-windows#188337を参照してください。 –

+5

はい、あります。 Find HandleまたはDll(またはCtrl + Fキーを押す)をクリックし、探しているファイルの名前を入力すると、そのファイルが開いているプロセスのリストが表示されます。 –

+0

Process Explorerの名前が変更され、Process Monitorにバンドルされました。 –

4

「コンピュータ」(または「マイコンピュータ」)アイコンを右クリックし、ポップアップメニューから「管理」を選択すると、コンピュータ管理コンソールに移動します。

「システムツール\共有フォルダ」に「ファイルを開く」と表示されます。これはおそらくあなたが望むものに近いでしょうが、ファイルがネットワーク共有上にある場合は、ファイルが存在するサーバーで同じことをする必要があります。

+3

これは、他のネットワークユーザーが開いている共有ファイルのみを表示することに注意してください。ローカルシステム上で開いているファイルを見つけるのには役立ちません。これをサーバー上で実行すると、ファイルを開いているユーザーは誰かわかりますが、そのユーザーのコンピュータ上のプログラムは表示されません。プロセスエクスプローラ(@JayHofackerの言葉通り)は私にとってうまくいった。 – tomlogic

8

お試しHandleFilemon & Regmonは、duceプログラムfooがシステムに行っていることを理解しようとするのにも最適です。

+0

ハンドルを試してみました。ありがとう。 – Batandwa

+0

@slipsec Windows 2000 SP4、Windows XP SP2以降では、FileMonとRegmonが[Process Monitor v3.2](https://technet.microsoft.com/en-us/sysinternals/bb896645)に置き換えられました。 Windows Server 2003 SP1、およびWindows Vista。 – Lucky

5

お試しUnlocker

Unlockerサイトには、他のツールとの比較を示すわかりやすいグラフ(リンクをたどった後にスクロールダウン)があります。明らかにそのような比較は、通常はツール作成者によって書かれているため、通常は偏っていますが、グラフには少なくとも代替案がリストされているので、自分で試すことができます。

+4

Unlockerはロックされたファイルのみを表示し、開いているファイルは表示しません。ほとんどのWindowsソフトウェアは、使用するDLLをロックしますが、ドキュメントはロックしません。 – Tobias

36

lsof -p pidの同等は、Sysinternalsの合成出力が処理され、listdlls、すなわち

handle -p pid 
listdlls -p pid 

あなたがSysinternalsのpslistとPIDを見つけることができます。

5

ファイルは.dllは、あなたがその開いたそれを得た見にタスクリストコマンドラインアプリケーションを使用することができている場合:

TaskList /M nameof.dll 
プロセスIDを見つけるため
2

使用Process Explorerを。次に、Handleを使用して、開いているファイルを確認します。

例:あなたは、マイクロソフト自身からのユーティリティを使用しているので、私はこのアプローチが好き

を-p扱います。

+0

もし私たちがソースコードを持っていたのであれば、 – Paladin

1

OpenedFilesViewには、[オプション]メニューの[ネットワークファイルを表示]という名前のメニュー項目があります。おそらくそれが有効になっていると、前述のユーティリティはいくつか使用されています。

5

lsofはの1当量すなわちSysinternalsのハンドルlistdllsから出力組み合わせることができます。

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 

は残念ながら、あなたがそれらを使用できるようにするには、 『管理者として実行』する必要があります。また

listdllsハンドルはそうPIDを隠しますファイル名をフィルタリング連続テーブル状を生成しません。

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

ここでは、そのgvim.exeが開いて、このファイルを有するものである見ることができますがfindstr /c:pid: /c:<filename>は、両方のユーティリティとあなたは非常に近い取得する必要があります。

3

「OpenFiles」というプログラムがあり、Windows 7の一部と思われます。あなたが望むことができると思われます。リモートユーザーがファイル共有を介して開いたファイルを一覧表示し、 "openfiles/Local on"を呼び出してシステムを再起動すると、ローカルで開いたファイルを表示できるようになります。後者はパフォーマンス上の罰則があると言われています。

+0

私はここに来て、誰がフォルダを削除して再起動しないようにしているのかを知る方法を探していました。 ....再起動が必要です。どのように非常に非常に窓。 – Gus

関連する問題