有什么方法可以获取映射到特定文件的进程数?
实际上,我想在所有进程都关闭时删除由多个进程共享的文件。有没有办法做到这一点?
我尝试使用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()-ed 文件的完整路径是 /dir1/dir2/my_file,您可以创建一个守护进程,它lsof /dir1/dir2/my_file
在循环中执行,直到发现没有进程my_file
打开。
假设应用程序是您的,并且您可以更改代码,我会建议另一种方法。让一个应用程序先于其他应用程序启动(甚至可以产生其他进程),并让该应用程序创建和删除文件。