我很想知道pstack命令如何打印在PID下运行的所有线程的堆栈跟踪?
它必须与gdb的方式不同,因为进程在gdb环境中运行,但pstack在执行进程后执行。
答案 0 :(得分:3)
这与gdb的概念相同。 pstack使用ptrace,它允许外部进程连接到已知的pid并打印出信息(堆栈通过当前寄存器得知)。
如果您想确切知道它是如何完成的,请查找有关ptrace
。
此外,进程并不真正“在gdb内”运行。您可以通过运行gdb executable pid
来轻松地将gdb附加到正在运行的进程。
答案 1 :(得分:0)
pstack打印类似于cat / proc /“pid”/ tasks / * / stack的输出,所以它很可能是读取procfs而不是使用ptrace。