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

时间:2016-09-29 12:49:42

标签: linux multithreading linux-kernel darwin mach

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

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

我有一个多线程排队系统,将作业分派到线程,可视化时间线显示作业何时开始/结束。为了优化它,我想添加一些关于作业实际运行时间的可视指示(例如在一个处理器核心上),以及它们被抢占时的情况。

1 个答案:

答案 0 :(得分:1)

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)

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