什么是“SYSV00000000”?

Ren*_*nan 8 linux shared-memory

在我的dmesg窗口管理器(xfwm4,XFCE 的一部分)崩溃时出现了这个:

xfwm4[3936]: segfault at 7f3c7c523770 ip 00007f3c7c523770 sp 00007ffffea1ee28 error 15 in SYSV00000000 (deleted)[7f3c7c4e8000+60000]
Run Code Online (Sandbox Code Playgroud)

同样的情况SYSV00000000也出现在其他地方(如lsof)。那么,这是SYSV00000000什么?我搜索了一下,发现它与虚拟内存有关,但与其他无关。

Ala*_*rry 12

内核告诉您,当发生段错误时,指令指针0x7f3c7c523770位于 SysV IPC shm 段中。共享内存段开始于0x7f3c7c4e8000并且是0x60000字节长。

SysV shm 段不受文件支持,因此该字符串SYSV00000000出现在您通常会获得发生段错误的可执行文件或库的文件名的位置。因此,这个日志行没有给我们提供真正有用的信息。如果您希望追踪崩溃的原因,则需要核心转储。

我怀疑指令指针根本不应该在那里。将可执行代码加载到 SysV shm 段中非常奇怪。但是我没有看到任何 XFCE 代码,所以在我看来很奇怪的地方可能是正常的。

您可以了解有关 sysv shm 的基础知识,假设您通过阅读这些手册页对内存管理的基础知识有一定的了解:

man svipc
man shmget
man shmat
Run Code Online (Sandbox Code Playgroud)

运行该ipcs命令以查看当前分配了哪些 sysv ipc 资源。ipcs -m将列表限制为仅共享内存段。