Windowsでファイルを開いたままにしているプロセスをどのように見つけますか?


515

Windowsで終わりを感じないことの1つは、古い共有違反エラーです。多くの場合、何が開いているのかを特定できません。通常、それは単に関連するディレクトリを指し示すエディターまたはエクスプローラーだけですが、時々マシンをリブートすることに頼らざるを得ませんでした。

犯人を見つける方法に関する提案はありますか?


12
この後、Windowsのスタッフは、エクスプローラーから簡単にこれを行う方法を提供してくれると思います。なぜこれが起こらなかったのだろうか?
コーフランド2009

6
エクスプローラーは、明らかな理由もなくファイルを保持している問題プロセスであることが非常に多いとわかります。
エディ

これはあまり役に立たないことは知っていますが、これはvistaと2008サーバーの後の次のWindowsリリースの計画された機能であることを思い出したと思います。または、WinFSの問題かもしれません。どこで読んだかわからない
...-キップ

スーパーユーザーに関する私の答えはこちらをご覧ください。要約すると、OpenedFilesViewは2019年でも引き続き動作します
Vijay

回答:


440

Sysinternals Process Explorerで成功しました。これにより、ファイルを開いているプロセスを検索し、必要に応じてそれを使用してハンドルを閉じることができます。もちろん、プロセス全体を閉じる方が安全です。注意と判断を行います。

特定のファイルを見つけるにはFind->Find Handle or DLL... 、ファイルへのパスの一部に入力するメニューオプションを使用します。プロセスのリストが下に表示されます。

コマンドラインを使用する場合、Sysinternalsスイートには、開いているハンドルを一覧表示するコマンドラインツールHandleが含まれています。使用方法のいくつかの例:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ -ドライブEから開いたすべてのファイルを検索します。
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question

17
ハンドルを閉じることはできますが、アプリケーションの下からラグを引き出していることを忘れないでください。結果はせいぜい予測不能です。
WaldenL 2009年

12
@ウォルデン:もちろんです。YMMV。WinXPでは、Explorerに明確な理由なしにハンドルを開かせ、閉じないように何度もさせました。削除する必要があるファイルでこれが発生した場合、ハンドルを強制的に閉じるか、再起動するかを選択できます。これまで、これを何十回も行ってきましたが、悪影響はありません。高度なツールと同様に、慎重に判断して使用してください。
エディ

5
ハンドルを閉じると、アプリが別のファイルのハンドルを再利用して破損を引き起こす可能性があります-以下のジェフの答えを参照してください:serverfault.com/a/15695/79266 ...再起動したくない。
-RichVel

14
Explorerの場合、ところで、Ctrl + Shift +とスタートメニューの空白の領域を右クリックして、あなたが「終了エクスプローラ」買ってあげる開催- PS、ではない非常にジェフの答え...
マーク・Sowul

2
非エグゼクティブファイルigテキストファイルの場合は役に立ちません。誰がログファイルに書き込んでいるかを知る必要があります。何か案が?
ザクロン

183

これには、Windows 7、8、および10に組み込まれているリソースモニターを使用できます。

  1. 開くことができる リソースモニターを開く
    • [スタート]メニューでリソースモニターまたはresmon.exeを検索するか 、または
    • タスクマネージャーの [ パフォーマンス ]タブのボタンとして
  2. [ CPU ]タブに移動します
  3. [ 関連付けられたハンドル]セクションの 検索フィールドを使用します
    • 以下のスクリーンショットの青い矢印を参照してください

ハンドルが見つかったら、画像またはPID列、あるいはその両方を見てプロセスを特定できます。

その後、通常どおりにアプリケーションを閉じることができます。または、それが不可能な場合は、ハンドルを右クリックして、そこから直接プロセスを強制終了します。簡単!

リソースモニターのスクリーンショット

私の元の答えからコピー:https : //superuser.com/a/643312/62


2
Windows 8でこのプログラムを見つけるのは難しい場合があることに注意してください-「resmon.exe」を検索して見つける必要があります。
カイロタン

4
@Kylotan、時間の無駄な検索を止めましょう。resmon cmdから直接実行するだけ
-Pacerier

1
@ペース:いいね。私は、Windowsパスにあることに慣れていません。
カイロタン

これは、「ハンドル| FindStr」および「Unlocker」の代替手段、ただしそれらは効果的でもあります
マーカス

4
Windows 10でも有効であり、タスクマネージャー-> [パフォーマンス]タブ内の[リソースモニターを開く]ボタンを使用して見つけることができます。
ノーマンブラウ

92

openfilesコマンドを試してください。


10
私は個人的にほとんどの場合ProcessExplorerを使用していますが、組み込みコマンドの場合は+1です。
RBerteig 2009年

本当に助かりました。
マルコ

7
エラー:ターゲットシステムは32ビットOSを実行している必要があります。
Bozojoe

4
64 OSでは機能しません!

12
これはWindows 2012R2 64bitで機能しているように見えますが、実行openfiles /local onして再起動することで「ローカルトラッキングを開く」サービスを有効にする必要があります。このため、この機能はあまり役に立ちません。
ガス

82

ハンドルを閉じるときは十分に注意してください。ハンドルリサイクルのため、思ったよりもさらに危険です。ファイルハンドルを閉じて、プログラムが別の何かを開くと、閉じた元のファイルハンドルがその「何か」に再利用される可能性があります。そして、実際にそのファイルハンドルが他の何かを指しているのに、プログラムが(ハンドルを閉じた)ファイルで動作していると考えて、プログラムが続行するとどうなるかを推測します。

このトピックに関するRaymond Chenの投稿を参照してください

検索インデックスサービスでインデックス作成のためにファイルを開いているが、一時的にスタックしていて、ファイルを削除したいので、(賢明ではないが)ハンドルを強制的に閉じたとします。検索インデックスサービスは、何らかの情報を記録するためにログファイルを開き、削除されたファイルへのハンドルは、ログファイルへのハンドルとしてリサイクルされます。スタック操作は最終的に完了し、検索インデックスサービスは最終的に、開いていたハンドルを閉じますが、ログファイルハンドルを無意識に閉じます。

検索インデックスサービスは、書き込み用の構成ファイルなどの別のファイルを開き、永続的な状態を更新できるようにします。ログファイルのハンドルは、構成ファイルのハンドルとしてリサイクルされます。検索インデックスサービスはいくつかの情報をログに記録するため、ログファイルに書き込みます。残念ながら、ログファイルハンドルは閉じられ、その構成ファイルでハンドルが再利用されました。ログに記録された情報は構成ファイルに入り、破損します。

一方、強制的に閉じられた別のハンドルは、データの破損を防ぐために使用されるミューテックスハンドルとして再利用されました。元のファイルハンドルが閉じられると、ミューテックスハンドルが閉じられ、データ破損に対する保護が失われます。サービスの実行時間が長くなるほど、そのインデックスはより破損します。最終的に、誰かがインデックスが誤った結果を返していることに気付きます。また、サービスを再起動しようとすると、構成ファイルが破損しているため失敗します。

検索インデックスサービスを行っている会社に問題を報告すると、インデックスが破損し、ログファイルのログ記録が不可解に停止し、構成ファイルがゴミで上書きされたと判断されます。貧しい技術者の中には、サービスがインデックスと構成ファイルを破損する理由を突き止めるという絶望的なタスクを割り当てられています。


12
重要な警告、これは一番上に近いはずです-再起動はおそらく静かに破損したファイルよりも優れています。
-RichVel

6
+1これは確かに、ハンドルを強制的に閉じることについて二度考えさせるでしょう!Windowsは、番号をインクリメントし続け、必要なときだけ折り返すのではなく、閉じたハンドルの番号をすぐに再利用するのは奇妙に思えます。これにより、少なくともこの問題が発生する可能性が大幅に減少します。
EM0 14

1
@RichVel犯人プロセスを終了することは、おそらく完全な再起動よりも良いでしょう。
ドミトリーグリゴリエフ

@DmitryGrigoryev-良い​​点、そして実際私はすでにここで
-RichVel

2
これは非常に重要な警告ですが、Windowsで開いているファイルを保持しているプロセスをどのように見つけますか
-Ploni

29

過去にそのようなプロセスを見つけるために、Handleを使用して成功しました。


3
私は常にこのツールを使用しています。USBドライブを取り出せない場合は、「handle H:」(またはドライブ文字は何でも)と入力します。何よりも、ハンドルを強制的に閉じるために使用できます。
クリストンプソン



7

明確にするために、これは、Windows自体にあるものよりも、CreateFile API呼び出しを正しく使用していないサードパーティアプリの誤動作の結果である可能性が高くなります。おそらく、それはCreateFileの設計の結果ですが、完了したので、戻ることはできません。

基本的に、Windowsプログラムでファイルを開くとき、共有アクセスを許可するフラグを指定するオプションがあります。フラグを指定しない場合、プログラムはファイルの排他的アクセスを取得します。

ここで、Explorerが犯人であると思われる場合、それは表面上のことであり、本当の犯人は、フォルダ内のすべてのファイルを独自の目的で開くシェル拡張機能をインストールするものである可能性がありますそうすることでガンホー、またはそれ自体が適切にクリーンアップしません。Symantec AVは以前にこれをやったことがありますが、他のAVプログラムが原因であるとしても驚かないでしょう。ソース管理プラグインにも問題がある可能性があります。

したがって、実際には答えではありませんが、誤って記述されたサードパーティプログラム(暗黙的なファイルロックを持っている他のOSでも発生する可能性がありますが、UnixベースのOSはデフォルト)。


1
私のWindowsエクスプローラーは、作業ディレクトリのThumbs.dbファイルを常にロックしますが、作業ディレクトリを切り替えるときに常にロックを解除するわけではないという事実について、サードパーティのアプリを非難しません。少なくとも彼らは、私は、ウィンドウを閉じるとロックが解除されて、私は... ALL探検家を殺すために必要はありません
アレクサンダー

@ダース、マイクロソフトのマーケティング担当者ですか?
Pacerier

6

リモートサーバーでは、ネットワーク共有を確認するときに、コンピューター管理コンソールのような単純なものでこの情報を表示し、ファイルを閉じることができます。


まさに、なぜそんなに複雑な答えがあるのですか?
ロヒトグプタ

6

ファイルを開いたままにするApropos Explorer:「削除する必要があるファイルでこの問題が発生した場合、ハンドルを強制的に閉じるか、再起動するかを選択できます。」

Explorerを終了するだけです。

これが1回限りの場合(Explorerは通常、このファイルを開いたままにしない)、ログオフしてから再度ログオンするとうまくいくと思います。

それ以外の場合は、デスクトップエクスプローラープロセスを強制終了し、実行中に必要な操作を行います。最初にcmd.exeのコピーを開始します(目的のクリーンアップを行うにはUIが必要です)。デスクトップ以外のExplorerが実行されていないことを確認してください。次に、タスクマネージャーなどで最後のエクスプローラーを強制終了します。コマンドプロンプトで必要な操作を行います。最後に、コマンドプロンプトからエクスプローラーを実行すると、デスクトップになります。

一部のシステムトレイプログラムがシェルの再起動に対処できない場合、不快感が残る可能性があると思います。


1
これは、ハンドルを閉じるよりもはるかに安全で、再起動するよりも破壊的ではありません。他のプログラムにも適用されます-Microsoft Officeプログラムは、ファイルを閉じた後でもファイルをロックしていることがよくあります。
リッチベル

5

ファイルは、ローカルプロセス(ロック解除ツールが使用するツールです)および共有を介したアクセスによりロックできます。

Windowsには、ローカルコンピューター上のどのファイルがリモートコンピューターによって開いている/ロックされているかを示すビルトイン関数があります(ファイル共有を介してファイルを開いています)。

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

そこで、ファイルを強制的に閉じることもできます。




2

上記の回答は、プログラムプロセスがファイルハンドルを開いたままにしている状況をカバーしていますが、これは(幸いなことに)ほとんどの場合です-ただし、場合によっては(現時点でこのシステムで発生しているように)、システム自体がファイルハンドルを保持しています開いた。

この状況は、上記のプロセスエクスプローラーでファイルハンドル保持プロセスを見つけるための指示に従い、プロセス名が「システム」としてリストされていることを確認するか、リソースモニターを使用して画像が表示されないことを確認することにより、この状況を特定できます目的のファイルでファイルハンドルを開いてください(ただし、明らかにファイルを編集/削除できないなどの理由で何かが行われます)。

その場合は、(私が知る限り)再起動するか、そのファイルで何かをすることを忘れてください。


0

少し前にJeremy ZawodnyのブログでExteneded Task Managerをオンにしましたが、プロセスに関する詳細情報を追跡するのにも最適です。上記のProcess Explorerの場合も+1。特に、標準のタスクマネージャーが終了しないプロセスを強制終了する場合。


0

ツールFILEMONがあり、開いているファイルとハンドルが表示されます。ライブで見るとディスプレイに追いつくのが難しいので、すぐに表示されます。ただし、ライブ表示を停止して、すべてのファイルのオープン/書き込みアクティビティを監視できます。現在はMicrosoftが所有していますが、元はSysinternalsが所有しています


1
これの更新バージョンはプロセスモニターです。ここから入手できます:http
//technet.microsoft.com/en-us/sysinternals/bb896645
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.