実行中のプログラムのディレクトリの削除

実行中のプログラムのディレクトリの削除

ディレクトリからプログラムを起動しましたが、誤ってディレクトリとその中のプログラムを削除しました。プログラムは複数の出力ファイルを生成します。プログラムはまだ実行中です。同じディレクトリを作成したら、プログラムがまだそのディレクトリに出力ファイルを生成するかどうかを知りたいと思います。それは可能ですか?

ベストアンサー1

ファイルエントリがファイルシステムから削除された場合、再生成することはできません。古いディレクトリの名前で新しいディレクトリを作成すると、新しいディレクトリになります。これらのファイルは魔法のように再現されません。

Unix(Linuxを含む)ファイルシステムの動作原理は、ファイル内のすべての情報を含むinodeで作業することです。とは別にその名前。ディレクトリ内のエントリは、名前と内容への唯一の接続であるinode番号で構成されています。ln完全に異なるファイル名を使用してファイルへの別のリンクを作成できます。

ファイルが削除されると、対応する参照数が減少します。 0に達すると、ファイルは実際に削除されます(ファイルが占有するスペースは空きブロックプールに返され、inodeは消去されます)。ただし、プロセスがまだファイルを開いたまま参照数が0に達しない限り、ファイルはまだ存在します。

Linuxでは、擬似ファイルシステムを介してプロセスで開かれたファイルを使用できます/proc/。プロセスのプロセスID(pid)がわかっている場合は、/proc/pid/fd/で開いているファイルのリストを見つけます。たとえば、プロセスの場合、apache略語のリストは次のとおりです。

$ sudo ls -l /proc/32704/fd
total 0
lr-x------ 1 root root 64 Nov 20 02:39 0 -> /dev/null
l-wx------ 1 root root 64 Nov 20 02:39 1 -> /dev/null
lr-x------ 1 root root 64 Nov 20 02:39 10 -> /dev/random
lrwx------ 1 root root 64 Nov 20 02:39 11 -> /tmp/.ZendSem.6DE1g1 (deleted)
lrwx------ 1 root root 64 Nov 20 02:39 12 -> anon_inode:[eventpoll]
l-wx------ 1 root root 64 Nov 20 02:39 2 -> /var/log/apache2/error.log

ここに追加された行を参照してください(deleted)。 Apacheは他の人がアクセスできない一時ファイルにそれを使用します。ファイルを作成して開き、リンクを解除(削除)します。ただし、それを使用することができ、開いたファイルを継承するので、Apacheの子プロセスもそれを使用できます。

あなたの場合は、削除されたファイルも見つかるはずです。 /procエントリを使用すると、プロセスの実行中に「削除された」ファイルを安全な場所にコピーできます。

sudo cp /proc/pid/fd/x $HOME/somewheresafe/filename

おすすめ記事