资源linux脚本,禁用/刷新额外输入

时间:2016-02-04 18:08:04

标签: linux bash shell unix scripting

大家下午好,

我创建了一个运行良好的资源监控工具。

  • 提取CPU平均使用量
  • 拉平均内存使用量
  • 甚至计算NIC吞吐量的百分比(如果您有1Gb网卡,它会显示一次处理的百分比)......是的我知道这更像是粗略估计/理论最大限制一个网卡。

我的剧本有一个问题。我遇到问题的部分代码如下(为简单起见,我将一些代码转换为伪代码)。

COUNT=1
read -rsp "When you are ready to begin, please press any key" -n1
echo "processing"
sleep 3
while [ ${COUNT} = "1" ; do
  read -t 1 -n 1
  if [$? = 0 ] ; then
    exit 0
  else
 `Resource command` > ${cpulog} file for future graphs
 `Resource command` > ${memlog} file for future graphs
 `Resource command` > ${network} log file for future graphs
 `etc`
 fi
done

基本上,您按任意键启动程序,并且在程序启动后按下键盘上的任意键(While循环)时,程序将停止记录信息并继续。

现在这个脚本可以工作并完成我需要做的所有事情。我遇到的问题是当你"按任意键"

请注意,脚本中有两个点等待按键。

如果我在第一点多次按任何,第二个键输入将由我的read -t 1 -n 1命令处理(在第二点),因此失败运行我的资源拉动。由于这种情况立即发生,因此脚本失败。

基本上,我试图找出是否有一种方法可以在有限时间内在第一次击键后关闭输入,同时检索有限数量的数据,或者刷新在击中我之前给出的任何输入{ {1}}命令。谢谢。

2 个答案:

答案 0 :(得分:2)

该脚本可以调用一个用C,perl或类似程序编写的小程序,它在stdin上调用FIONREAD ioctl。

然后通过阅读电话阅读意外的额外字符,请参阅Perl Cookbook to determine unread bytes 您实际上可以使用perl -e在命令行上输入perl代码。将它全部保存在bash脚本中。

答案 1 :(得分:1)

在"处理线上,"添加以下循环:

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
 registry.addHandler(handler(), "/helloworld").setAllowedOrigins("*");
}

它会增加大约1秒的启动延迟(如果用户坐在那里按键会更多),但否则会做你想要的。