Windowsでファイルを開いているプロセスを特定する。
ファイルを開いているプロセスを特定する場合、Linux だと lsof というコマンドで解決できるんですが、Windows の場合、SysInternals を使えば解決できます。
SysInternals というのは、元々 Microsoft とは別の会社の名前だったんですが、Microsoft によって買収されたことにより、SysInternals 社が開発したツール群が会社名のまま呼ばれるようになった、と記憶しています。
日経コンピュータの ITpro にもその様に書かれていますね。
- http://itpro.nikkeibp.co.jp/article/COLUMN/20120531/399690/
- http://itpro.nikkeibp.co.jp/article/COLUMN/20120601/399941/
で、自分が知っている方法としては2つありまして、1つは GUI の Process Explorer を使う方法、もう1つは CUI の Handle を使う方法です。
Process Explorer も Handle も単体でインストーラー(zipファイル)をダウンロードできますが、、、
- Process Explorer - https://technet.microsoft.com/en-us/sysinternals/processexplorer
- Handle - https://technet.microsoft.com/ja-jp/sysinternals/handle
これらを一纏めにした SysInternals Suite というものもあるので、個別にダウンロードするのが面倒ならば、こちらでも良いかと思います。
- SysInternals Suite - https://technet.microsoft.com/ja-jp/sysinternals/bb842062
インストーラーをダウンロードしたら、適当なフォルダで解凍します。
解凍されたフォルダの中にある procexp.exe と handle.exe が、それぞれ Process Explorer と Handle の実行ファイルです。
Process Explorer でファイルを開いているプロセスを特定する場合、以下の方法で確認できます。
- procexp.exe を実行する。⇒ Process Explorer が表示されます。
- 【Process Explorer】メインメニューから「View」→「Lower Pane View」→「Handles」を選択する。または [Ctrl]+[H] キーを押す。⇒ 画面の下にファイルのハンドル一覧が表示されます。
- 【Process Explorer】メインメニューから「Find」→「Find Handle or DLL...」を選択する。または [Ctrl]+[F] キーを押す。⇒ Process Explorer Search ダイアログが表示されます。
- 【Process Explorer Search】ファイル名を入力して「Search」ボタンを押す。⇒ その下にファイルを開いているハンドルの一覧が表示されます。
一方、Handle でファイルを開いているプロセスを特定する場合、以下の方法で確認できます。
- handle.exe のフォルダにパスを通す。
- コマンドプロンプトを開き、以下の様なコマンドを実行する。⇒ファイルを開いているプロセスやそのPIDが表示されます。
handle (ファイル名)
- Find process that created a file on windows - Stack Overflow
- http://www.computerhope.com/forum/index.php?topic=43653.0
関連記事:
rms-099.hatenablog.jp