0

谁能解释多个进程如何保存未链接的文件?目前我看到同一个 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)
4

2 回答 2

1

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

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

Xvnc ... > someLogFile 2>&1

后来,someLogFile被删除以(未成功)恢复空间。

于 2015-01-10T05:03:55.717 回答
0

谁能解释多个进程如何保存未链接的文件?

是的,有人可以。

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

但是看看你的列表,我认为这些是共享内存段之类的东西,不需要在某个地方有一个文件系统节点。

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

现代 CPU 和操作系统将进程的地址空间相互隔离,因此进程 A 无法访问进程 B 的内存。如果现在 A 和 B 需要交换信息,一种方法是要求操作系统映射一个几个地址进入各自的内存空间,这两个进程的/相同/内存。这些段需要句柄,而这些句柄就是我所指的。如需更多信息,man shm_overview.

于 2015-01-10T01:29:37.960 回答