02-探索操作系统
[toc]
6.1 探索操作系统
有些技术成功地屏蔽了不同操作系统之间的差异,而有些技术则需要花费很多精力来处理不同操作系统之间的差异。Node刚好介于这二者之间。在大多数情况下,你创建的应用可以在所有地方运行。但有些功能依然会受到操作系统的影响。就像我在本章开始时提到的,有时候Node能很好地处理这些操作系统相关的差异,有时候则需要借助于第三方模块。
通过 OS
这个核心模块你可以访问操作系统的相关信息。它是帮助我们创建具有跨平台功能的应用程序的有用工具之一。它还能提供当前环境资源的使用情况和能力信息。
访问之前,首先要用 require
来加载 OS
模块:
var os = require('os');
OS
模块的功能仅限于提供信息。比如,如果希望某些功能可跨平台运行,那可以看看系统是否支持行末字符,或者看看系统是大端(big-endian,BE)还是小端(little-endian,LE),以及获取临时目录或home目录的路径:
var os = require('os');
console.log('Using end of line' + os.EOL + 'to insert a new line');
console.log(os.endianness());
console.log(os.tmpdir());
console.log(os.homedir());
Ubuntu系统和Windows 10计算机都是小端系统,EOL字符在这两个系统中都能很好地工作(后半部分打印的日志会另起一行)。唯一不同的是临时目录和home目录不一致,不过也在意料之中。
**临时目录** 临时目录是文件被临时存储的地方。在系统重启或中断时,目录里的内容会被删除。
操作系统模块也提供了一种检测当前机器中资源是否可用的方式:
console.log(os.freemem());
console.log(os.loadavg());
console.log(os.totalmem());
os.loadavg()
函数是UNIX特有的,在Windows中它只会返回0。这是1分钟、5分和15分钟的负载平均值,它反映了系统的活动。把3个数分别乘以100%,就能得到百分比。内存函数 os.freemen()
和 os.totalmem()
会返回内存的字节数。
另一个函数 os.cpus()
会返回关于机器CPU的信息。它返回CPU在 user
、 nice
、 sys
、 idle
和 irq
上面花费的毫秒数。可能有读者不熟悉这个概念,这里简要介绍一下, user
是CPU花在用户进程上的总时间; idle
反映了CPU的空闲时间; sys
是CPU花在系统进程(内核)上的时间; nice
值反映的是用户空间进程的优先级被修正的程度,目的是为了改变进程的运行频率; irq
是硬件级别的服务中断请求。
CPU的总时间信息不如百分比有用。我们可以通过对所有值加和,来获取每个数字所占的百分比。我们还可以用第三方模块提供的功能来获取百分比,以及其他信息。微软提供了一个很不错的文档,该文档讲解了如何在Azure上使用这个功能,文档中列出的信息和模块应该能在所有环境中工作。