我正在开发一个具有流程监控功能的C ++应用程序,它根据此模型监控状态更改:http://www.macdesign.net/capella/it4813/images/stallings-Linux_process-thread_states-f4.18.png
但是,由于/ proc / pid / status将“就绪”和“执行”状态都合并为“正在运行”,我不知道如何找出这些进程实际上属于哪种状态任何人都可以就我如何发现这一点提出任何建议吗?
答案 0 :(得分:2)
问题是畸形的。在单个CPU上,从“永远”可以看到处于“运行”状态的进程,因为根据定义,监视进程具有CPU。如果您确实需要对流程转换进行细粒度的日志记录控制,则需要在内核中执行此操作(或者至少在内核中支持 - 请参阅lttng或systemtap以获取可能对此有帮助的工具)。用于跟踪来自用户空间的CPU使用情况的工具更粗粒度,要么使用内核已经跟踪的总使用数量(例如/usr/bin/time
),要么每隔一段时间对进程表进行一次采样(bootchart以这种方式工作)。