是否存在适用于Linux和Darwin的低级系统API,以获取调度程序的“快照”,查看哪些线程在给定时间运行(活动),抢占,等待资源或类似?
例如,Ubuntu“系统监视器”有一个进程的“等待通道”列,是否有办法为进程内的所有线程获取类似的输出?
我有一个多线程排队系统,将作业分派到线程,可视化时间线显示作业何时开始/结束。为了优化它,我想添加一些关于作业实际运行时间的可视指示(例如在一个处理器核心上),以及它们被抢占时的情况。
答案 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)
该目录下有更多有用的细节。