2

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

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

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

4

1 回答 1

1

top -H显示线程及其状态。在其源代码中跟随 -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)

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

于 2016-09-30T08:21:55.127 回答