C++:Linux上的pthread状态监控
Posted
技术标签:
【中文标题】C++:Linux上的pthread状态监控【英文标题】:C++:pthread status monitoring on Linux 【发布时间】:2017-03-21 06:12:36 【问题描述】:我有一个运行 8 个独立线程的应用程序,这些线程是通过围绕 Pthread 的包装类生成的。所有线程都在无限循环中运行,每个循环时间为 1 秒。从主线程(主函数,也在无限循环中运行),我想监视线程状态是否由于某种原因线程被阻塞。有没有办法通过系统调用来监控线程状态?
【问题讨论】:
您可以从主线程调用 ps 并查看各个线程的状态,例如,如果线程处于 S+ 或 D 状态。或者看 ps src 代码,不调用 ps 并解析其输出,直接执行。 【参考方案1】:GDB 是最好的选择,
使用以下命令将 gdb 附加到正在运行的进程
gdb -p "pid"
info threads
这将显示应用程序中的所有线程以及每个线程的状态
【讨论】:
我想在程序本身中进行,gdb 不是一个选项...根据线程状态做出一些决策【参考方案2】:您可以访问 proc 文件系统中的进程状态信息。使用线程的 PID,您可以在 /proc/[PID]/status
中查找它们的状态
状态文件的内容如下:
ubuntu@ip-172-30-1-159:/proc/1151$ cat status
Name: systemd-logind
State: S (sleeping)
Tgid: 1151
Ngid: 0
Pid: 1151
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
...
【讨论】:
以上是关于C++:Linux上的pthread状态监控的主要内容,如果未能解决你的问题,请参考以下文章
linux下多线程之pthread_detach(pthread_self())
linux应用中,在一个进程内如何获取本进程内其它线程的堆栈信息、