是否有办法获得映射到特定文件的进程数?
实际上,我想在所有进程都关闭时删除多个进程共享的文件。有什么办法吗?
我尝试使用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
为止。
假设应用程序是您的,并且您可以更改代码,我建议使用另一种方法。让一个应用程序在其他应用程序之前启动(甚至可以产生其他进程),并让该应用程序创建和删除文件。