特定のファイルにマップされているプロセスの数を取得する方法はありますか?
本当は全プロセスダウン時に複数プロセスで共有しているファイルを削除したいのですが。それを行う方法はありますか?
fstat
の数を取得するために関数呼び出しを試みましhard links
たが、マッピング後にファイルを閉じているためstat.st_nlink
、常に0
です。
最初に、 のプールを作成する必要がありますfork
。次に、ハードリンク、シンボリックリンクなどのすべてのファイルに 経由でアクセスできます。struct stat
を参照してくださいman 2 stat
。
PIDs
必要な と ファイルの相対的な関係を知りたいので、次のことを行う必要があり/proc
ます。/proc/PID/stat
次のプロジェクトはあなたの仕事を簡単にすると思います:
http://brokestream.com/procstat.html
プロセスのすべてのファイルを に保存した後、std::tuple
プロセスを停止してからファイルを削除できます。
mmap() で処理されたファイルへのフル パスが /dir1/dir2/my_file であると仮定すると、プロセスが開かlsof /dir1/dir2/my_file
れていないことがわかるまで、ループで実行されるデーモンを作成できます。my_file
アプリケーションがあなたのものであり、コードを変更できると仮定すると、別のアプローチをお勧めします。1 つのアプリケーションを他のアプリケーションよりも前に開始し (他のプロセスを生成することもできます)、このアプリケーションでファイルを作成および削除します。