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()-ed 文件的完整路径是 /dir1/dir2/my_file,您可以创建一个守护进程,它lsof /dir1/dir2/my_file在循环中执行,直到发现没有进程my_file打开。

假设应用程序是您的,并且您可以更改代码,我会建议另一种方法。让一个应用程序先于其他应用程序启动(甚至可以产生其他进程),并让该应用程序创建和删除文件。

于 2014-03-21T07:57:23.480 回答