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())

检查pthread可取消状态

linux下如何监听进程

linux应用中,在一个进程内如何获取本进程内其它线程的堆栈信息、

从 pthread 调用 sleep() 是不是会使线程进入睡眠状态或进程?

Monit : 开源监控工具介绍