有没有办法获得那些映射到特定文件的进程数?
实际上,我希望在所有进程都关闭时删除多个进程共享的文件。有没有办法做到这一点?
我尝试使用fstat
函数调用来获取hard links
的数量,但是在映射之后我关闭了文件,因此stat.st_nlink
始终是0
。
答案 0 :(得分:1)
首先,您需要创建fork
的资源池。然后,您可以通过struct stat
访问每个文件hardlink,symb-link等,请参阅man 2 stat
。
因为您想要找出PIDs
与/proc
所需文件之间的相对关系,您需要:/proc/PID/stat
我认为以下项目可以轻松完成工作:
http://brokestream.com/procstat.html
在std::tuple
保存流程的所有文件后,您可以关闭流程,然后删除文件。
答案 1 :(得分:1)
假设mmap() - ed文件的完整路径是/ dir1 / dir2 / my_file,您可以创建一个守护进程,它在循环中执行lsof /dir1/dir2/my_file
,直到它发现没有进程{{1开了。
假设应用程序是您的,并且您可以更改代码,我会建议另一种方法。让一个应用程序在其他应用程序之前启动(甚至可以生成其他进程),并让此应用程序创建并删除该文件。