/proc/self/stack과 pstack 출력의 차이점은 무엇입니까?

/proc/self/stack과 pstack 출력의 차이점은 무엇입니까?

나는 /proc에 대한 문서를 살펴보았는데 "스택" 개체는 proc의 새로운 개체이고 이를 생성하기 위한 커널 커밋도 살펴보았습니다. 그러나 문서에는 /에 무엇이 있는지 자세히 설명되어 있지 않습니다. proc/self/stack 파일 – 직관적으로 이것이 프로세스의 실제 스택일 것이라고 예상했기 때문에 – 이전 pstack도구는 다른(그리고 더 신뢰할 수 있는) 출력을 제공했습니다.

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에 실제로 표시되는 내용을 설명하는 문서가 있는 사람이 있습니까?

답변1

이 파일은 /proc/$pid/stacks커널 스택을 보여줍니다. 시스템에서 ffffffff8xxxxxxx 형식의 메모리 주소는 커널용으로 예약된 공간에 있습니다. 서류가 많지 않으니 확인해보세요소스 코드. 대신 pstack프로그램은 실행 가능한 형식에 대한 지식을 사용하여 사용자 공간 스택을 표시합니다.

관련 정보