我目前getrusage
用来告诉我在应用程序的事件循环中花费了多少时间。
我想知道这将如何受到冬眠的影响。是否报告了休眠时间?或者也许作为系统时间?这是在 Posix 中的某个地方指定的还是这个系统依赖的?
编辑在此处对 Windows 提出相同的问题。
我认为 POSIX 在任何地方都没有提到休眠,所以它在技术上依赖于平台。
我只能说 Linux,但其他 UNIX 变体——甚至可能是 Windows——可能表现类似,因为这是最有意义的。
在 Linux 中,在内核源代码下的 Documentation/power/swsusp.txt 中描述了在休眠状态下发生的确切细节。简而言之,用户进程被发送一个虚假信号,导致它们切换到TASK_UNINTERRUPTIBLE
状态。处于该TASK_UNINTERRUPTIBLE
状态的进程从运行队列中取出并进入睡眠状态,直到它等待的条件成立,因此所花费的时间TASK_UNINTERRUPTIBLE
既不计入用户时间也不计入系统时间。如果你用 来衡量运行时间time(1)
,你最多会看到它对挂钟时间有贡献。
使用getrusage(2)
,您将看不到任何报告的 CPU 时间的差异,因为该进程不可运行。
因此,回答您的问题:根本不报告休眠时间。