1

特定のファイルにマップされているプロセスの数を取得する方法はありますか?

本当は全プロセスダウン時に複数プロセスで共有しているファイルを削除したいのですが。それを行う方法はありますか?

fstatの数を取得するために関数呼び出しを試みましhard linksたが、マッピング後にファイルを閉じているためstat.st_nlink、常に0です。

4

2 に答える 2

1

最初に、 のプールを作成する必要がありますfork。次に、ハードリンク、シンボリックリンクなどのすべてのファイルに 経由でアクセスできます。struct statを参照してくださいman 2 stat

PIDs必要な と ファイルの相対的な関係を知りたいので、次のことを行う必要があり/procます。/proc/PID/stat

次のプロジェクトはあなたの仕事を簡単にすると思います:

http://brokestream.com/procstat.html

プロセスのすべてのファイルを に保存した後、std::tupleプロセスを停止してからファイルを削除できます。

于 2014-03-21T07:57:14.343 に答える
1

mmap() で処理されたファイルへのフル パスが /dir1/dir2/my_file であると仮定すると、プロセスが開かlsof /dir1/dir2/my_fileれていないことがわかるまで、ループで実行されるデーモンを作成できます。my_file

アプリケーションがあなたのものであり、コードを変更できると仮定すると、別のアプローチをお勧めします。1 つのアプリケーションを他のアプリケーションよりも前に開始し (他のプロセスを生成することもできます)、このアプリケーションでファイルを作成および削除します。

于 2014-03-21T07:57:23.480 に答える