lsof显示多个进程的未链接文件

时间:2015-01-10 01:25:34

标签: unix inode lsof

任何人都可以解释多个进程如何保存未链接的文件?目前我看到同一个inode 1543的四个进程

# /usr/local/bin/lsof +aL1 /dev/vg00/lvol4

Xvnc      20622 p32adm    2u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)
vncconfig 20649 p32adm    1u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)
vncconfig 20649 p32adm    2u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)
xterm     20650 p32adm    1u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)
xterm     20650 p32adm    2u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)
twm       20651 p32adm    1u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)
twm       20651 p32adm    2u   REG 64,0x40004 4587683840     0 1543 /home (/dev/vg00/lvol4)

2 个答案:

答案 0 :(得分:1)

虽然没有特别的理由期望不同的流程不共享未链接的文件,正如MarcusMüller已经回答的那样,在您的情况下,这些文件是流程stdoutstderr

我猜这些进程都是以这种方式启动的原始命令继承了这些文件描述符:

Xvnc ... > someLogFile 2>&1

以后,someLogFile被移除(无法成功)恢复空间。

答案 1 :(得分:0)

  

任何人都可以解释多个进程可以保存未链接的文件吗?

是的,有人可以。

首先,它现在取消关联这一事实并不一定意味着当进程获得文件句柄时它被取消链接。

但是看看你的列表,我认为这些是共享内存段,而不需要在某处拥有文件系统节点。

编辑:OP要求在评论中解释共享内存段,所以这里是:

现代CPU和操作系统将进程的地址空间隔离开来,因此进程A无法访问进程B的内存。如果现在A和B需要交换信息,一种方法是询问操作系统将几个地址映射到两个进程的相同/存储器的相应存储空间中。这些段需要句柄,这些句柄就是我所指的。有关详细信息,请man shm_overview