我如何知道进程的最后计划时间

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个参数中,最多有一个在任何时候都出现非零值,我怀疑各自的非零值表示最后一次进入相应状态的时间(进程活跃运行 当全部为零时)。

因此,如果您的进程确实卡住了,非零值会在它卡住时记录下来。

注意:这主要基于观察和假设 - 我没有在任何地方找到这些参数的记录,所以请对它们持保留态度。

该文件中还有大量其他日程安排信息,但主要是统计信息且没有文档难以使用。