Linux用の私のお気に入りのツールの1つは、lsofです。これは本物のスイスアーミーナイフです。
今日、私はWinXPシステム上のどのプログラムが特定のファイルを開いているのか疑問に思いました。lsofと同等のユーティリティはありますか?さらに、問題のファイルはネットワーク共有を介していたため、それが問題を複雑にするかどうかはわかりません。
Linux用の私のお気に入りのツールの1つは、lsofです。これは本物のスイスアーミーナイフです。
今日、私はWinXPシステム上のどのプログラムが特定のファイルを開いているのか疑問に思いました。lsofと同等のユーティリティはありますか?さらに、問題のファイルはネットワーク共有を介していたため、それが問題を複雑にするかどうかはわかりません。
SysinternalsSuiteのProcessExplorerを使用すると、ハンドルの検索またはDLL関数を使用して、そのファイルを開いた状態でプロセスを検索できます。
に相当するのlsof -p pid
は、sysinternalsハンドルとlistdllsからの出力を組み合わせたものです。
handle -p pid
listdlls -p pid
sysinternalsでpidを見つけることができますpslist
。
lsofに相当するものは、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 が隠されます。findstr /c:pid: /c:<filename>
ただし、両方のユーティリティに非常に近づくはずです
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 がこのファイルを開いていることがわかります。
Unlockerを試してください。
Unlockerサイトには、他のツールとの比較を示す気の利いたチャート(リンクをたどってから下にスクロール)があります。明らかに、そのような比較は、通常、ツールの作成者によって作成されるため、通常は偏っていますが、チャートには、自分で試すことができるように、少なくとも代替案がリストされています。
Windows 7の一部のように見えるプログラム「OpenFiles」があります。それはあなたが望むことをすることができるようです。リモート ユーザーが (ファイル共有を介して) 開いたファイルを一覧表示でき、「openfiles /Local on」を呼び出してシステムを再起動した後、ローカルで開いたファイルを表示できるはずです。後者には、パフォーマンスのペナルティがあると言われています。
「コンピューター」(または「マイコンピューター」)アイコンを右クリックして、ポップアップメニューから「管理」を選択すると、コンピューター管理コンソールが表示されます。
そこのSystemTools\ Shared Foldersの下に、「OpenFiles」があります。これはおそらくあなたが望むものに近いですが、ファイルがネットワーク共有上にある場合は、ファイルが存在するサーバー上で同じことを行う必要があります。
Process Explorer を使用して、プロセス ID を見つけます。次に、ハンドルを使用して、開いているファイルを見つけます。
例: handle -p
Microsoft 自体のユーティリティを使用しているため、このアプローチが気に入っています。
OpenedFilesViewの[オプション] メニューの下に、[ネットワーク ファイルを表示] という名前のメニュー項目があります。おそらくそれが有効になっていると、前述のユーティリティが役に立ちます。