web-dev-qa-db-ja.com

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

Windowsについて私に終わりがないことの1つは、古い共有違反エラーです。多くの場合、何が開いているのかを特定できません。通常、これは単にエディタまたはエクスプローラで、関連するディレクトリを指しているだけですが、マシンを再起動しなければならない場合もあります。

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

538
cletus

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

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

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

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

これにはResource Monitorを使用できますbuilt-inはWindows 7、8、および10に付属しています。

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

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

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

Resource Monitor screenshot

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

195
Svish

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

93
John Fouhy

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

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

検索インデックスサービスがインデックス作成のために開いているファイルを持っているが、一時的にスタックしていて、そのファイルを削除したいとします。そのため、(不適切に)ハンドルを強制的に閉じます。検索インデックスサービスは、いくつかの情報を記録するためにログファイルを開き、削除されたファイルへのハンドルは、ログファイルへのハンドルとしてリサイクルされます。スタックオペレーションが最終的に完了し、検索インデックスサービスは最終的に、開いていたハンドルを閉じますが、ログファイルハンドルを意図せずに閉じてしまいます。

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

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

検索インデックスサービスを提供する会社に問題を報告すると、インデックスが破損していること、ログファイルが不可解な形でログ記録を停止していること、構成ファイルがゴミで上書きされていることがわかります。一部の貧弱な技術者には、サービスがインデックスと構成ファイルを破損する理由を解明する絶望的なタスクが割り当てられています。破損の原因が、ハンドルを強制的に閉じたことに気づいていません。

83
Mark Sowul

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

29
Greg Hewgill

Lockhunter( http://lockhunter.com/ )は、32ビットシステムと64ビットシステムで動作します。

11
Scoregraphic

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

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

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

したがって、実際には答えではありませんが、不適切に作成されたサードパーティプログラム(暗黙のファイルロックを備えた他のOSでも発生する可能性があるものの、UNIXベースのOSがデフォルト)。

7
Maximus Minimus

Who Lock Me はうまく機能し、名前で人々を面白がらせます!

7
Generic Error

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

エクスプローラを終了するだけです。

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

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

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

6
dave

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

6
K. Brian Kelley

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

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

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

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

5
Dirk Paessler

Process Hacker を使用すると、ファイルを保持しているプロセスを簡単に識別できます。

Find Handles or DLLs

4
Ivan Kochurkin

NirSoftの 開かれたファイルビュー もあります。

4

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

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

それが起こった場合、あなたのオプション(私が知る限り)は再起動するか、そのファイルで何かをすることを忘れます。

2
Blair

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

0
user44304

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

0
nedm