Windows では、プロセスが taskkill によって終了された後もファイルロックは残りますか?

Windows では、プロセスが taskkill によって終了された後もファイルロックは残りますか?

ここでは、再起動/再起動については触れていません (別の質問と同様)。この質問は、Windows がタスクキル時に既存のファイル ロックを処理する方法と、シャットダウン/再起動に応答する方法の違いを区別しています。

もし私が強制的に殺すプログラムがロックしたファイルはロックされたままになりますか、それともプロセスが終了するとロックも解除されますか?

強制終了とは、タスクマネージャーで「taskkill」コマンドや「プロセス ツリーの終了」を使用することを意味します。

さらに明確に言うと、MS Word のように、常駐の削除されていない補助ロック ファイルを残すプロセスについて話しているわけではありません。実際の排他的または共有ファイル ロックの状態について話しているのです。

taskkill はファイルロックを解除しますか? それとも、再起動するか、コンピューターの管理コンソール内で管理者ユーザーのアクションが実行されるまでロックはそのまま残りますか?

私が確認できたのは、排他ロックをかける16ビットプロセスを強制終了することです。

これは、同じローカル ディレクトリ内のファイルに排他ロックをかける小さなコンソール プログラムを使用しています。プログラムは、ユーザーがキーを押すまで実行され、その後ファイルのロックを解除します。次に、その内容を示します。

  • コマンド プロンプトで起動し、タスク マネージャーで強制終了すると、ロックが解除されます。強制終了するプロセスは、プログラムを起動した特定の cmd.exe です。これを強制終了すると、ロックが解除されます。

  • クリックして起動し、ウィンドウを閉じて終了すると、ロックは解除されます。

  • ただし、タスク マネージャーで conhost.exe をクリックして強制終了して起動した場合、ロックは解除されません。この場合、クリックされたため、cmd.exe も存在しません。したがって、これを強制終了する唯一の方法は、実行中の conhost.exe または ntvdm.exe を強制終了することです。ロックは再起動後まで維持されます。

  • タスクマネージャーで ntvdm.exe をクリックして終了することで起動すると、ロックは解除されます。

  • 排他ロックによって実際にファイルの削除が防止されることはありません。ただし、Windows ではロックがかかっている間はエクスプローラーでファイルをコピーすることはできません。

したがって、タスクが cmd プロンプト経由で起動されたか、または conhost または ntvdm サブシステムをクリックして強制終了されたかによって、2 つの異なる動作が発生します。もちろん、ntvdm.exe サブシステムを強制終了すると、ntvdm スレッドでタスクが実行されている他のすべてのプロセスも強制終了されます。

答え1

はい、ロックは残りますが、OSによっていつ解除されるかを予測することはできません。ロックファイル()そしてロックファイルEx():

プロセスがファイルの一部をロックした状態で終了するか、未処理のロックがあるファイルを閉じると、オペレーティング システムによってロックが解除されます。ただし、オペレーティング システムがこれらのロックを解除するのにかかる時間は、使用可能なシステム リソースによって異なります。したがって、プロセスが終了するときに、ロックされているすべてのファイルを明示的にロック解除することをお勧めします。これを行わないと、オペレーティング システムがまだロックを解除していない場合に、これらのファイルへのアクセスが拒否される可能性があります。

関連情報