我在macOS中遇到了无法关闭内存映射文件的情况
首先取消映射它(使用munmap系统调用),虽然关闭系统调用返回成功结果(= 0)我仍然可以在lsof -n
中看到文件记录。
在linux中,根据mmap手册页明确提到closing the file doesn't unmap the file
。
两个操作系统之间确实存在不同的行为吗? 这种不同的行为有什么解释吗?
编辑:在阅读下面的评论之后,我意识到平台之间没有不同的行为,我的文件仍然打开的原因是因为它仍然被mmap引用。谢谢
答案 0 :(得分:3)
POSIX要求即使在关闭后也会引用mmap的文件。
mmap()函数应添加对与文件描述符fildes相关联的文件的额外引用,该文件描述符fildes不会被该文件描述符上的后续close()删除。当没有更多映射文件时,应删除此引用。
这就是lsof
看到的那个文件的引用。所以它的工作记录在案。