
先用ps看目前存在的所有进程的进程号,然后可以对具体进程采用以下这些 *** 作:(11345就是对应具体的进程号)
只查看该进程:ps -ef | grep 11345
查看该进程打开的文件:lsof -p 11345
查看内存分配:lcat /proc/11345/maps
查看堆栈:pstack 11345
查看发出的系统调用:strace -p 11345
查看调用库函数:ltrace -p 11345
有时候,在kernel里经常收到一些系统调用,但不知道是谁调的。可以按下面的步骤找到。1kernel 里面打印出线程ID、线程名、进程IDchar currtask_name[FIELD_SIZEOF(struct task_struct, comm) + 1];printk("pid %u(%s)\n",current->pid, get_task_comm(currtask_name, current));2 在/proc/pid/task/tid/下面有线程的信息。
GetThreadId 根据线程句柄得到线程ID。
GetWindowThreadProcessId ,根据窗口句柄得到此窗口所在线程的ID(也同时得到进程的ID)
OpenThread,能根据ID得到线程的句柄。
线上app运行过程中有内存突变、卡顿、cpu飙升、crash等情况,需要获取发生这些情况时的所有堆栈信息,以此来辅助定位问题
只能获取当前堆栈信息,不能获取指定其他线程的信息,所以不满足要求
Linux下获取当前线程ID号函数:
pthread_t pthread_self();
返回:当前线程的ID号
pthread_t 数据类型的定义如下:
typedef unsigned long int pthread_t;
sizeof(pthread_t) = 4,4个字节的整数。
Windows下获取当前线程ID号的函数:
DWORD GetCurrentThreadId();
返回值:当前线程的ID号
DWORD数据类型定义:
typedef unsigned long DWORD;
在Windows下pthread-win库的pthread_t定义如下:
typedef struct {
void p; /Pointer to actual object /
unsigned int x; /Extra information - reuse count etc /
} ptw32_handle_t;
typedef ptw32_handle_t pthread_t;
与Linux的thread_t不一样,它是一个结构,不是一个整数值
在Windows和Linux下可用的获取线程ID号的内联函数如下:
#ifdef WIN32
#include <windowsh>
#else
#include <pthreadh>
#endif
inline unsigned int PthreadSelf()
{
#ifdef WIN32
return::GetCurrentThreadId();
#else
returnthread_self();
#endif
}
以上就是关于linux应用中,在一个进程内如何获取本进程内其它线程的堆栈信息、全部的内容,包括:linux应用中,在一个进程内如何获取本进程内其它线程的堆栈信息、、android 如何得到线程id、如何获取一个进程中所有线程ID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)