已知一个线程ID,如何得到该线程所属的进程ID

已知一个线程ID,如何得到该线程所属的进程ID,第1张

线程进程内部的一个执行单元,一个进程可以有多个线程,但是这些线程仅存在于该进程中,纯种是在它所属的进程地址空间里执行的,并在进程的地址空间对数据进行 *** 作。

输入下面的语句:

Requirements

Client

Requires Windows Vista

Server

Requires Windows Server 2008 or Windows Server 2003

Header

Declared in Winbaseh; include Windowsh

Library

Use Kernel32lib

DLL

Requires Kernel32dll

用AIP "GetWindowThreadProcessId" 版本 2

支持库 eAPI

支持库 spec程序集 窗口程序集1子程序 __启动窗口_创建完毕

局部变量 QQ窗口, 整数型

局部变量 进程, 进程信息

局部变量 iD, 整数型QQ窗口 = 取窗口句柄_ (0, “QQ2011”)

iD = 取窗口进程 (QQ窗口, 进程)'易语言精英 团队解答

调试输出 (iD)

版本 2

支持库 eAPIDLL命令 取窗口进程, 整数型, "user32", "GetWindowThreadProcessId", , 返回创建者的标志符。

参数 窗口句柄, 整数型, , 被查找窗口的句柄

参数 进程号, 进程信息, , 进程号的存放地址(变量地址)DLL命令 取窗口句柄_, 整数型, "user32", "FindWindowA"

参数 类名, 整数型

参数 标题, 文本型

cpuidle过高或过低回收到告警。工作中,机器cpuidle过高或过低,会收到告警。P2主机名:set-xr-xxxx监控项:all(#5)cpuidle1、使用top+大写P,查看cpu占用过高的进程这里往往就是后台java服务,要通过进程来排查具体的线程,这时有两种方法。top-H-p[pid],这时可以看到该进程下的所有线程,同样与大写P结合可以查看cpu占用过高的线程。

2、ps-mp[pid]-oTHREAD,tid,time,此时也可以看到该进程下的所有线程,其中m代表列出该进程下的所有线程,p代表列出线程占用cpu的时间,o代表格式化输出。通过以上两种方法可以获取到线程id,以下称为tid。

3、将tid转为16进制,可以使用以下命令printf"%xn"[tid],得到的16进制线程id,同样称为tid。

4、stack[pid]|greptid(16进制)-A60,从输出中排查公司相关的代码内容,找到问题代码的行数,进行排查,是fullgc导致的,可以进一步dumpjvm内存信息进行排查。

5、jmap-dump:format=b,file=dump-allhprof[pid]#dump全量内存数据,[pid]替换为上一步查找的进程id。

6、jmap-dump:live,format=b,file=dumphprof[pid]#再次dump存活对象内存数据,注意live参数会触发fullgc,本次dump一定要在上一步全量dump之后执行。

7、使用eclipse的工具mat打开,进行排查。

在一个线程出现异常行为时,比如说CPU占用率过高,抛出异常等,你一定想知道这个线程是由哪个模块创建的。

因此无论在哪个 *** 作系统上,获取线程名称是诊断线程相关问题的重要一步。

从线程ID获取线程名称通常的方法是,先获取该线程的入口地址!

以上就是关于已知一个线程ID,如何得到该线程所属的进程ID全部的内容,包括:已知一个线程ID,如何得到该线程所属的进程ID、易语言怎么获取指定窗口的进程ID和线程ID呢求助!在线等、cpuidle过高或过低等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9402502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存