【问题标题】:how to know if system is completely idle如何知道系统是否完全空闲
【发布时间】:2014-09-04 10:18:51
【问题描述】:

我想弄清楚,我们如何知道系统是否空闲?如果系统空闲 x 分钟,我想暂停系统。我试图找到这个并尝试了下面的脚本代码

#!/bin/bash

idletime=$((1000*60)) # 1 minute in milliseconds

while true; do
    idle=`xprintidle`
    echo $idle
    if (( $idle > $idletime )); then
       echo -n "mem" >> /sys/power/state
    fi
    sleep 1
done

但是 xprintidle 只监视鼠标和键盘活动以增加它的计数器。 现在如果我在无限循环中运行一个程序,那么它也会暂停系统。

另一个选项是在一段时间内从 /proc/stat 提取空闲时间,但在不同的系统上,如果我离开系统没有任何活动,我会看到不同的 cpu 空闲值范围。

谁能帮助我如何实现系统暂停。

【问题讨论】:

  • 那么你可以监控系统空闲时的cpu使用范围是多少,为cron作业等留出余地,然后测试cpu使用是否保持在这个范围内,以及测试输入。这似乎使问题有点过于复杂了 imo
  • @limecore for sandeep 的问题 我认为监控 CPU 不是一个好主意。当有人输入文本时,CPU 变化很少(Tbh 也取决于文本编辑器)。在决定索引某些内容或发送报告等的应用程序数量内,仍被视为“空闲”。顺便说一句,帖子中的 topicstarter 在提到他已经尝试监视 /proc/stat 时几乎是这么说的

标签: linux linux-kernel power-management


【解决方案1】:

事情可以而且将会随时发生。 cron启动了一些东西。某人的 sleep() 调用结束,它会唤醒几毫秒。

我想说,想出一些有意义的启发式方法。例如,定期对 /proc/loadavg 进行采样,如果在给定的时间段内平均负载低于某个阈值,则假定系统现在处于空闲状态。

【讨论】:

  • 我肯定会关注这一点,但是 loadaverage 会因系统而异吗?我需要检查这一点,还需要检查什么是阈值限制。感谢您的回复山姆。
  • /proc/loadavg 总是会改变,即使在同一个系统上也是如此。 “空闲”的含义没有官方定义。您必须使用自己的定义。
  • 是的,我的观察结果非常相似,我看到的是它因系统和已经打开的应用程序而异。我只是想检查一下,当无事可做时,空闲胎面是否在处理器上运行。有什么方法可以知道空闲线程何时被调度。
  • Linux 中没有“空闲线程”。您正在考虑其他一些技术上较差的操作系统。当没有进程需要调度时,内核停止CPU直到下一次中断,时间记为“空闲”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2012-01-20
  • 2016-05-25
相关资源
最近更新 更多