Linux下用Google API绘制进程CPU占用率饼图- Black Aureole - 博客园

 

 


再看看Google前不久刚发布的中的饼图(点击查看实际效果,下面只是截图,我不知道怎样在文章中嵌入js代码……):

 

  下面上Bash脚本的代码(这个编辑器居然不支持Bash代码高亮……我就用PS高亮代替吧,不过怪怪的……):

 1 #! /bin/bash
 2 
 3 function gen_chart() {
 4     chl="chl=$1"; chd="chd=t:$2"; shift ; shift
 5     while [ $# -gt 0 ]; do chl="${chl}|$1"; chd="${chd},$2"; shift; shift; done
 6     
 7     #URL="http://chart.apis.google.com/chart?chs=500x200&cht=p3&chtt=Top+10+Processes+Running&$chl&$chd"
 8     URL="http://home.ustc.edu.cn/~stephen1/pschart.html?chtt=Top+10+Processes+Running&$chl&$chd"
 9     chrome "$URL" 2>/dev/null
10 }
11 
12 gen_chart `ps -eo "%c%C" --sort=-pcpu | head -11 | tail -10`
13 

  原理很简单,首先调用ps命令排序打印出当前各进程的CPU占用率,然后取出前10项,剩下的事情就交给google API吧:-)

--------------------------- 完事分割线 ---------------------------

  感谢grapeot的分享。非常感叹PowerShell的强大。我之前以为PS仅仅是CMD的一个升级版本,只是增加一些小工具,现在发现我的直觉又一次错了。从grapeot的介绍看,我认为PS的精髓在于面向对象的思想,命令之间传递的不是文本,而是对象。如果PS能搞出个支持传递对象的管道,也许就更强大了!

  微软不仅努力降低最终用户使用电脑的门槛,增强用户体验,同时也一直在努力降低开发人员的门槛,这也使得它在市场上有大量的开发团队。Linux开发的门槛太高,不过,带来的好处是,代码质量普遍较高,程序执行效率高,但是用户太可怜了……

 -------------------------- 又是分割线 ----------------------------

   谁能告诉我怎样在这个博客的文章中直接插入JavaScript代码并能运行?另外,如果想在编辑器中增加一个Bash的代码块,该向谁反应? 多谢各位捧场~

 

转载请注明出处:   


尘光
刚才做了一个简单的实验,似乎仍然是可以使用的。
写了一个简单的C++程序,从stdin中读取两个整数,然后输出它们的和。
用"2 3" | .\test.exe可以得到输出5,说明如果直接传递string对象的话是可以兼容的。
用2..3 | .\test.exe也可以得到输出5,说明传递int[]对象也可以。
这可能和所有对象都继承自Object,而Object有一个ToString()方法有关。
MSDN说,只有cmdlet可以接受对象作为参数。因此根据MSDN和实验结果猜测,对于native applications,PS自动将所有变量格式化为文本传递。

grapeot:
@尘光
刚才做了一个简单的实验,似乎仍然是可以使用的。
写了一个简单的C++程序,从stdin中读取两个整数,然后输出它们的和。
用"2 3" | .\test.exe可以得到输出5,说明如果直接传递string对象的话是可以兼容的。
用2..3 | .\test.exe也可以得到输出5,说明传递int[]对象也可以。
这可能和所有对象都继承自Object,而Object有一个ToString()方法有关。
MSDN说,只有cmdlet可以接受对象作为参数。因此根据MSDN和实验结果猜测,对于native applications,PS自动将所有变量格式化为文本传递。

我手头没有PS,没办法实验。一下内容是我的猜测:
管道本身的定义是把前者的stdout重定向到后者的stdin中,stdout和stdin都是文件描述符。通常两个描述符应该是以文本方式打开的文件,我猜测,PS中的stdin和stdout是不是以二进制的方式打开的?不过我尝试了下,在Linux下是不能用fscanf和fprintf对以二进制方式打开的文件进行操作的。

尘光
中对PS管道的解释是:
因为 Windows 是一个庞大而复杂的操作系统,而且它不会以文本格式存储它的管理数据,所以较早的外壳技术根本不适合它。
有趣的是 Windows PowerShell 始终会将对象沿着管道传递。直到管道的末端才停止(当没有其他地方可以传递对象的时候),外壳会使用其内置格式规则生成对象的文本表示形式。
使用 Windows PowerShell 的技巧是要了解,虽然这个新工具建立在长期存在的原则和 UNIX 世界的原理之上,但它是适合 Windows 管理的{wy}工具。不要让术语的通用性愚弄了您,让您误以为 Windows PowerShell 就是 Windows 的 UNIX 外壳翻版。Windows PowerShell 包含全新的概念,那就是利用 Windows 平台,将它与 Windows 执行任务的方式紧密结合起来。

不过语言有点怪怪的...

grapeot
明白了。看来,*nix在概念上也许要一次变革了,不然又要落后了。有些概念竟然一用就是几十年,一点都没有变过。
不过Unix中还有一个非常重要的原则,就是KISS。Unix不喜欢把东西做的太复杂,为了保持较高的效率和鲁棒性,大多数*nix开发人员还是宁可牺牲开发的便捷性,而使原始模型保持简单。就好像C语言,现在来看C语言,实在太简单了,就那么点东西,但是它很强大,很健壮(当然前提是程序员明白C每一时刻都在干什么,但对于更高级的语言,几乎很难做到让程序员知道程序在每一刻都在做什么),效率也很高。
我觉得,面对PowerShell,*nix阵营也不会轻易改变他们对管道的定义,对象这个东西对*nix来说太复杂了。
---------------------------
感谢这样一个交流的平台,一篇小小的文章就能学到这么多东西!

郑重声明:资讯 【Linux下用Google API绘制进程CPU占用率饼图- Black Aureole - 博客园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——