web-dev-qa-db-ja.com

ファイルが開いているディレクトリを移動できますか?

/home/user/logsディレクトリを使用する一連のプロセスを想像してみてください。いくつかのログが長時間開いています。

6
Konrad Garus

はい、特定の条件下で。親ディレクトリを移動してもファイルのiノードは変更されないため、開いているファイルハンドルは引き続き有効です。条件は次のとおりです。

  • ファイルシステム間でディレクトリを移動することはありません。もちろん、ファイルのiノード番号は変更されます。
  • プロセスは実際にはdoファイルを開いたままにし、時々閉じないでください(そうであれば、アプリケーションを再構成して、新しい親ディレクトリを認識させる必要があります)
  • Ext2/3/4またはさまざまなバージョンのufsの1つを使用しています。他のファイルシステムが内部でどのように編成されているかわからないため、正直に話すことはできません。
6
Alexios

プロセスは通常、ファイルをログで長時間開いたままにしません。

はい、いつでも任意のプロセスで使用されている任意のディレクトリまたはファイルを移動/削除できます。ちなみに、プロセスの実行中にプロセスの実行可能ファイルを削除すると、実行を継続できます。

ただし、考えられるいくつかのシナリオに備えてください。

  • プロセスがログファイルを書き込むために再開すると、プロセスはそれらを再作成します。
  • プロセスは、新しい場所ではなく古い場所に書き込みを続けます
  • プロセスの実行可能ファイルを削除すると、再度開始することはできません。

プロセスが記述子を使用しない場合、ファイルは削除時に物理的にクリアされます。ファイルがすぐに移動/削除されたことがわかります。

1
Patkos Csaba