与当前进程交互
node提供了一些process的属性,如下:
process.version:包含当前node实例的版本号;
process.installPrefix:包含安装路径;
process.platform:列举node运行的操作系统的环境,只会显示内核相关的信息,如:linux2, darwin,而不是“Redhat ES3” ,“Windows 7”,“OSX 10.7”等;
process.uptime():包含当前进程运行的时长(秒);
process.getgid(), process.setgid():获取或者设置group id;
process.getuid(), process.setuid():获取或者设计user id;
process.pid:获取进程id;
process.title:设置进程名称;
process.execPath:当前node进程的执行路径,如:/usr/local/bin/node;
process.cwd():当前工作目录;
process.memoryUsage():node进程内存的使用情况,rss代表ram的使用情况,vsize代表总内存的使用大小,包括ram和swap;
process.heapTotal,process.heapUsed:分别代表v8引擎内存分配和正在使用的大小。
事件循环和ticker
node中提供了process.nextTick()方法,允许你访问事件循环和延时那你的工作。他有点类似于setTimeout(),他会在下次tick的时候执行,而且每隔一段事件就会执行一次。我们这里有个例子:
var http = require('http');
var s = http.createServer(function(req, res) {
res.writeHead(200, {});
res.end('foo');
console.log('http response');
process.nextTick(function(){console.log('tick')});
});
s.listen(8000);当请求来的时候,会记录日志‘http response’和‘tick’,当没有请求的时候,每隔一段事件会执行事件循环,会输出tick。
此外,nextTick创建的回调函数具有隔离性,他们之间不会相互影响。
process.on('uncaughtException', function(e) {
console.log(e);
});
process.nextTick(function() {
console.log('tick');
});
process.nextTick(function() {
iAmAMistake();
console.log('tock');
});
process.nextTick(function() {
console.log('tick tock');
});
console.log('End of 1st loop');在这个例子中,首先输出‘End of 1st loop’,然后顺序的输出nextTick的回调函数,第一个会正常输出‘tick’,第二个是一个故意设置的异常会输出异常信息,不会输出‘tock’,因为nextTick回调函数的隔离性,第三个任然会输出‘tick tock’。结果如下:
End of 1st loop
tick
[ReferenceError: iAmAMistake is not defined]tick tock
子进程
node提供了child_process模块,允许你为主进程创建子进程,这样你就可以使用更多的服务器资源,使用更多的cpu,这些概念在前面的章节有介绍。node提供了child_process. spawn()和child_process. exec()为你实现这一功能,下面我们就单独介绍。









