/ proc / self / stack与pstack的输出有什么区别?

Modified on: Sat, 30 Jun 2018 06:51:00 +0800

我一直在查看/ proc的文档和“stack”对象是proc中的一个新的对象,我还查看了内核提交来创建它 - 但是文档没有详细说明究竟是什么在/ proc / self / stack文件中 - 因为我直觉地认为它是进程的实际堆栈 - 但旧的pstack工具提供了一个不同的(更可信的)输出。 / p>

所以作为bash的堆栈的一个例子

$ cat /proc/self/stack 
[<ffffffff8106f955>] do_wait+0x1c5/0x250
[<ffffffff8106fa83>] sys_wait4+0xa3/0x100
[<ffffffff81013172>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff

并使用pstack

$ pstack $$
#0  0x00000038cfaa664e in waitpid () from /lib64/libc.so.6
#1  0x000000000043ed42 in ?? ()
#2  0x000000000043ffbf in wait_for ()
#3  0x0000000000430bc9 in execute_command_internal ()
#4  0x0000000000430dbe in execute_command ()
#5  0x000000000041d526 in reader_loop ()
#6  0x000000000041ccde in main ()

地址不同,显然这些符号完全不同......

是否有人对差异和/或描述/ proc-stack中实际显示内容的文档有解释?

作者:Soren

最佳答案

文件/proc/$pid/stacks显示内核堆栈。在您的系统上,ffffffff8xxxxxxx形式的内存地址位于为内核保留的空间中。文档不多,您可以查看源代码。在contracst中,pstack程序显示用户空间堆栈(使用其可执行格式的知识)。

作者:Gilles

相关问答

添加新评论