查看线程何时处于活动状态的系统API

问题描述:

是否存在用于Linux和Darwin的低级系统API,获取调度程序的“快照”,查看哪些线程在特定时间运行(活动),抢占,等待资源,或类似?查看线程何时处于活动状态的系统API

例如,Ubuntu的“系统监视器”有一个用于进程的“等待通道”列,有没有办法为进程内的所有线程获取类似的输出?

我有一个多线程的排队系统,其中作业分派给线程,可视时间线显示作业何时开始/完成。为了优化它,我想添加一些视觉指示,说明作业实际运行的时间(例如在一个处理器内核上),以及何时被抢占。

top -H显示线程及其状态。在its source之后的-H开关将成为查找的一种方式。从快速查看看,功能int cmd_threads(globalstate *gstate)commands.c似乎切换设置。

更新:Procfs将该信息提供给用户空间。 /proc/<pid>/task/<thread-id>/status给出你所需要的。这也是top也使用。这里是我的系统的示例输出:

$ cat /proc/418/task/448/status | grep State 
State: S (sleeping) 

该目录下有很多更多有用的细节。