现成的方法有pstack或者使用gdb -p,一般用于查找进程堵塞或者CPU占用过高时的堆栈。
基本原理是通过ptrace到某个进程获取其寄存器的BP值,依次推导出整个执行栈
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <linux/user.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/wait.h>
extern int errno;
static inline int attachproccess(int process)
{
if (-1 == ptrace((enum __ptrace_request)PTRACE_ATTACH, process, NULL, NULL))
{
printf("[%s:%d] attach process %d failed : %s /n", __FILE__, __LINE__, process, strerror(errno));
return -1;
}
int status;
if (-1 == wait(&status))
{
printf("[%s:%d] wait proces