getrusage() 如何报告休眠时间?

How does getrusage() report time spent hibernating?

我目前正在使用 getrusage 来告诉我我在应用程序的事件循环中花费了多少时间。

我想知道休眠会如何影响它。是否报告了休眠时间?或者作为系统时间?这是在 Posix 某处指定的还是依赖于此系统?

编辑 为 Windows 问同样的问题 here

我认为 POSIX 没有在任何地方提到休眠,所以它在技术上取决于平台。

我只能代表 Linux,但其他 UNIX 变体 - 甚至可能 Windows - 可能表现相似,因为这是最有意义的。

在 Linux 中,在内核源代码下的 Documentation/power/swsusp.txt 中描述了休眠幕后发生的具体细节。简而言之,用户进程会收到一个假信号,导致它们切换到 TASK_UNINTERRUPTIBLE 状态。处于 TASK_UNINTERRUPTIBLE 状态的进程从 运行 队列中取出并进入睡眠状态,直到它等待的条件成立,因此在 TASK_UNINTERRUPTIBLE 中花费的时间既不计入用户时间也不作为系统时间。如果您要用 time(1) 测量 运行 次,您最多会看到它对挂钟时间有贡献。

使用 getrusage(2),您将不会在报告的 CPU 次中看到任何差异,因为该过程不 运行nable。

所以,回答你的问题:根本没有报告休眠时间。