Linux 如何知道进程的最后预定时间

Linux 如何知道进程的最后预定时间,linux,process,linux-kernel,scheduling,Linux,Process,Linux Kernel,Scheduling,我现在遇到了一个问题,进程似乎被卡住了,只是没有被安排,状态总是“S”。我已经通过debugfs监视sched_switch_任务跟踪一段时间了,没有看到进程被调度。所以我想知道内核最后一次安排这个进程的时间是什么时候 非常感谢。可以使用/proc/pid\sched文件中的信息 在那里您可以找到这些参数(取决于操作系统版本,我的是opensuse 3.16.7-21-desktop): 这些值表示与系统启动时间相关的时间戳,但单位可能取决于您的系统(在我的示例中,单位为0.5毫秒,总值约为6天

我现在遇到了一个问题,进程似乎被卡住了,只是没有被安排,状态总是“S”。我已经通过debugfs监视sched_switch_任务跟踪一段时间了,没有看到进程被调度。所以我想知道内核最后一次安排这个进程的时间是什么时候

非常感谢。

可以使用
/proc/pid\sched
文件中的信息

在那里您可以找到这些参数(取决于操作系统版本,我的是opensuse 3.16.7-21-desktop):

这些值表示与系统启动时间相关的时间戳,但单位可能取决于您的系统(在我的示例中,单位为0.5毫秒,总值约为6天20小时并有变化)

在上面列出的最后3个参数中,最多有一个在任何时候看起来都是非零的,我怀疑相应的非零值表示最后进入相应状态的时间(当所有参数都为零时,进程正在运行)

因此,如果您的进程确实被卡住了,那么当它被卡住时,非零值就会被记录下来

注意:这主要是基于观察和假设——我在任何地方都没有发现这些参数记录在案,所以请恕我直言


该文件中有大量其他调度信息,但大多数是统计信息,没有文档,很难使用。

BTW,一些不错的相关调试方法,但没有回答您的问题:注意:'S'状态通常意味着进程在等待某种输入时处于休眠状态-网络、用户、磁盘等等。。。
se.exec_start                                :     593336938.868448
...
se.statistics.wait_start                     :             0.000000
se.statistics.sleep_start                    :     593336938.868448
se.statistics.block_start                    :             0.000000