我在堆栈顶部遇到了“SYS#0”,找不到任何关于这意味着什么的文档。
- 编译器:g++
- 操作系统:Solaris 9
- 拱门:SPARC
- 来自Hoard 3.5.1的内存管理器 libhoard_32.so
我们使用“gcore”来生成核心文件。查看针对核心文件运行“pstack”命令的输出,唯一正在做任何有趣事情的线程在其调用堆栈的最顶部有以下内容:
ff309858 SYS#0 ()
ff309848 void MyHashMap<const void*,unsigned,AlignedMmapInstance<65536U>::SourceHeap>::set(const void*,unsigned) (ff31eed4, 9bf20000, 10000, 40, 9bf1fff0, ff31e738) + 134
...
该 LWP 的 pflags 显示:
/8: flags = PR_STOPPED|PR_ISTOP|PR_ASLEEP
why = PR_REQUESTED
sigmask = 0xfffffeff,0x00003fff
我在 Sun 文档中找不到任何提及此语法的内容。
编辑:在执行 gcore 之前,该过程似乎已经挂起。“SYS#0”是否与进程挂起有某种关联?
编辑:添加了下一个堆栈帧并链接到 Hoard、pflags 输出
编辑:接受的答案是正确的。此外,至少在 SPARC 上,g1
寄存器应该 包含系统调用号,但在我们的核心文件中似乎不是这种情况。
主题“什么是间接系统调用?” 可能是另一个问题的好材料。