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

System API to see when threads are active

是否有用于Linux和达尔文的低级系统API,以获取调度程序的"snapshot",以查看在给定时间有哪些线程运行(活动)、抢占、等待资源或类似情况?

例如 Ubuntu "System Monitor" 有一个 "Waiting channel" 进程列,有没有办法为进程内的所有线程获得类似的输出?

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

top -H 显示线程及其状态。在 its source 中的 -H 开关之后将是一种查找方法。快速看一下,commands.c 中的函数 int cmd_threads(globalstate *gstate) 似乎可以切换设置。

更新:Procfs 向用户 space 提供该信息。 /proc/<pid>/task/<thread-id>/status 正是您所需要的。这也是 top 使用的。这是我系统的示例输出:

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

该目录下还有更多有用的详细信息。