Qual é a diferença entre / proc / self / stack e output from pstack?

5

Eu tenho procurado na documentação o / proc e o objeto "stack" sendo um objeto new'ish no proc, eu também olhei através do commit do kernel para criá-lo - no entanto a documentação não detalha exatamente o que é no arquivo / proc / self / stack - e desde que eu intuitivamente esperava que fosse a pilha real do processo - no entanto, a antiga ferramenta pstack fornece uma saída diferente (e mais crível).

Então, como um exemplo da pilha para o bash

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

e, usando o 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 ()

Os endereços são diferentes e, obviamente, os símbolos não são iguais ...

Alguém tem uma explicação para a diferença e / ou um documento que descreve o que é realmente mostrado em / proc-stack?

    
por Soren 25.10.2011 / 01:20

1 resposta

5

O arquivo /proc/$pid/stacks mostra as pilhas do kernel. No seu sistema, os endereços de memória do formulário ffffffff8xxxxxxx estão no espaço reservado para o kernel. Não há muita documentação, você pode verificar o código-fonte . Em contrapartida, o programa pstack mostra pilhas de espaço do usuário (usando seu conhecimento de formatos executáveis).

    
por 25.10.2011 / 02:39