lsof 与 cat/proc/.../maps

lsof 与 cat/proc/.../maps

在寻找修补 OpenSSL 后需要重新启动的服务的检测方法时,我偶然发现了这两个命令的返回之间的差异:

[root@host ~]# cat /proc/1/maps
7f751546c000-7f7515478000 r-xp 00000000 fd:01 5170 /lib64/libnss_files-2.12.so (已删除)
7f751567a000-7f7515804000 r-xp 00000000 fd:01 360 /lib64/libc-2.12.so(已删除)
7f7515a09000-7f7515a0e000 读写 00000000 00:00 0
7f7515a0e000-7f7515a24000 r-xp 00000000 fd:01 14847 /lib64/libgcc_s-4.4.7-20120601.so.1
7f7515c24000-7f7515c2b000 r-xp 00000000 fd:01 5173 /lib64/librt-2.12.so(已删除)
...
[root@主机~]# lsof -p 1
命令 PID 用户 FD 类型 设备大小/关闭 节点名称
初始化 1 根 cwd DIR 253,1 4096 2 /
初始化 1 根 rtd DIR 253,1 4096 2 /
初始化 1 根 txt REG 253,1 150352 534 /sbin/init
初始化 1 根 DEL REG 253,1 5170 /lib64/libnss_files-2.12.so
init 1 root DEL REG 253,1 360 /lib64/libc-2.12.so
init 1 根内存 REG 253,1 90880 14847 /lib64/libgcc_s-4.4.7-20120601.so.1
初始化 1 根 DEL REG 253,1 5173 /lib64/librt-2.12.so
...

为什么第一个说已被删除,而另一个却没有?

我还想补充一点,上次系统重新启动比这些文件的上次修改时间更近,这往往让我认为它们自上次启动以来尚未被删除......

答案1

lsof列表打开文件,以及映射(2)可以在文件描述符关闭甚至unlink-ed (它使用 i 节点)后访问数据,但/proc/$PID/maps尝试显示有关它们的一些信息。

相关内容