我如何知道进程的最后计划时间
How do I know the last sched time of a process
我目前 运行 遇到一个问题,进程似乎不知何故卡住了,只是没有被安排,状态始终是 'S'。我已经通过 debugfs 监视 sched_switch_task trace 一段时间了,没有看到进程被安排。所以我想知道内核最后一次安排这个进程是什么时候?
非常感谢。
可能可以使用 /proc/pid#/sched
文件中的信息。
在那里你可以找到这些参数(取决于OS版本,我的是opensuse 3.16.7-21-desktop):
se.exec_start : 593336938.868448
...
se.statistics.wait_start : 0.000000
se.statistics.sleep_start : 593336938.868448
se.statistics.block_start : 0.000000
这些值表示相对于系统启动时间的时间戳,但单位可能取决于您的系统(在我的示例中,单位为 0.5 毫秒,总值约为 6 天 20 小时并不断变化)。
在上面列出的最后3个参数中,最多有一个在任何时候都出现非零值,我怀疑各自的非零值表示最后一次进入相应状态的时间(进程活跃运行 当全部为零时)。
因此,如果您的进程确实卡住了,非零值会在它卡住时记录下来。
注意:这主要基于观察和假设 - 我没有在任何地方找到这些参数的记录,所以请对它们持保留态度。
该文件中还有大量其他日程安排信息,但主要是统计信息且没有文档难以使用。
我目前 运行 遇到一个问题,进程似乎不知何故卡住了,只是没有被安排,状态始终是 'S'。我已经通过 debugfs 监视 sched_switch_task trace 一段时间了,没有看到进程被安排。所以我想知道内核最后一次安排这个进程是什么时候?
非常感谢。
可能可以使用 /proc/pid#/sched
文件中的信息。
在那里你可以找到这些参数(取决于OS版本,我的是opensuse 3.16.7-21-desktop):
se.exec_start : 593336938.868448
...
se.statistics.wait_start : 0.000000
se.statistics.sleep_start : 593336938.868448
se.statistics.block_start : 0.000000
这些值表示相对于系统启动时间的时间戳,但单位可能取决于您的系统(在我的示例中,单位为 0.5 毫秒,总值约为 6 天 20 小时并不断变化)。
在上面列出的最后3个参数中,最多有一个在任何时候都出现非零值,我怀疑各自的非零值表示最后一次进入相应状态的时间(进程活跃运行 当全部为零时)。
因此,如果您的进程确实卡住了,非零值会在它卡住时记录下来。
注意:这主要基于观察和假设 - 我没有在任何地方找到这些参数的记录,所以请对它们持保留态度。
该文件中还有大量其他日程安排信息,但主要是统计信息且没有文档难以使用。