详解nodejs中的process进程

2020-06-17 06:05:57易采站长站整理

   与当前进程交互

  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()为你实现这一功能,下面我们就单独介绍。