- 这是什么意思?
- 如何
lsof
找到这样的FD?即与普通 FD 相比,可以很容易地找到ls -l /proc/$PID/fd/$FD
.
$ lsof -p $(pgrep pulseaudio) | head -n1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
$ lsof -p $(pgrep pulseaudio) | grep DEL
pulseaudi 25911 alan-sysop DEL REG 0,5 2334404 /memfd:pulseaudio
pulseaudi 25911 alan-sysop DEL REG 0,5 2340448 /memfd:pulseaudio
pulseaudi 25911 alan-sysop DEL REG 0,5 2335426 /memfd:pulseaudio
pulseaudi 25911 alan-sysop DEL REG 0,5 2340018 /memfd:pulseaudio
pulseaudi 25911 alan-sysop DEL REG 0,5 2340021 /memfd:pulseaudio
pulseaudi 25911 alan-sysop DEL REG 0,5 2334322 /memfd:pulseaudio
pulseaudi 25911 alan-sysop DEL REG 0,5 2336421 /memfd:pulseaudio
man lsof
仅记录列的DEL
值TYPE
,而不是FD
列。
https://stackoverflow.com/a/37160579/1601027,正如@don_crissti 指出的那样。
lsof
即使以 root 身份运行,也无法显示这些文件的大小。(我lsof
的是 4.89 版)。但是,如果您同时拥有足够新的内核和
root
访问权限,那么您既可以在 中查看映射ls -l /proc/$PID/map_files/
,也可以stat --dereference
在单个文件上运行以显示它们的大小。这可用于检查“已删除”映射文件使用的资源。特别是memfd
s,它永远不会出现在文件系统中,并且始终被视为(deleted)
文件。例如,至少可以看到没有单独的 memfd,至少由 FD 或内存映射直接保存,自己消耗千兆字节。不过,如果有一些更好的工具或脚本来解决这个问题,仍然会很好。