2010-12-04 13 views
0

私はファイルを作成し、そのファイルを使用しているプロセスを実行しています。 そのプロセスの終了後、私はそのファイルを削除しています。プロセスのすべてのリソースを解放する方法は?

場合によっては、プロセスによってファイルが解放されたかどうかを知る方法と、プロセスによってロックされている場合にファイルを削除する方法があります。任意のヘルプ:)

+0

「プロセス」とは、実際には1つのプログラム内でメソッド呼び出しまたはスレッドを意味しますか? – IanNorton

+0

メソッド呼び出しではなく、プロセスによって呼び出されるexeファイルです。 –

答えて

1

Windowsでは、プロセスが終了すると、OSはそのプロセスが所有するすべてのリソースを自動的に返します。物語の終わり。

たとえば、メモリセグメントを共有する2つのプロセスのそれぞれで "CreateFileMapping()"を実行したとします。最初のプロセスが終了すると、Windowsは使用カウンタを減らし、残っているプロセスだけが引き続きオブジェクトを使用できます。 2番目のプロセスが "CloseHandle()"(または自身を終了する)を実行すると、カウンタは0にデクリメントされ、オブジェクトは完全に解放されます。

言い換えれば、Windowsはリソースが使用されなくなったときに、プロセス自体が正常にクリーンアップされているかどうかに関係なく、リソースを再利用します。

また、排他アクセス用にファイルを開いても、ファイルハンドルが閉じられるとファイル自体は「ロック」されません(また、プログラムが終了するとWindowsは自動的に閉じます)。

+0

プロセスが正常に終了せず、例外などで終了した場合は、リソースが解放されているかどうかを確認します。 –

+0

paulsm4の答えは最後の文でそれをカバーしています。プログラムが終了すると、Windowsはそれを閉じます。 –

0

ため

おかげで、あなたのプログラムが終了 - どんなに何を意味するのかによって、 - ファイルを、それがまだ存在する場合には、もはやプロセスによってロックされません...プロセスが存在しないため、 。

しかし、私は不思議に思っています。ファイルが最後に削除されている場合は、まずファイルを最初に作成する必要がありますか?

+0

私はいくつかのコンテンツを使用してファイルを作成しています。使用した後、削除しています。その後もう一度別のリクエストでもう1つのファイルを作成しています。ファイルは共有できませんので、複数のユーザーがそれを使用している場合、私は複数のファイルを作成する必要があります。 –

+0

あなたが言うことは、ファイルがまったく必要ない場所のようなものです。ファイルは通常何らかの方法で*共有する必要があるものです。データが短期間で単一のコンテキストにのみ必要な場合は、メモリが多分大量のデータでない限り、より良いでしょう。しかし、私の答えの残りはとにかく適用されます。プロセスが終了すると、ファイルはロックされなくなります。それでどちらかの方法で削除してください。 –

関連する問題