process是一个全局变量,可以直接调用。
process的属性,如下:
version:包含当前node实例的版本号;
installPrefix:包含安装路径;
platform:列举node运行的操作系统的环境,只会显示内核相关的信息,如:linux2, darwin,而不是“Redhat ES3” ,“Windows 7”,“OSX 10.7”等;
pid:获取进程id;
title:设置进程名称;
execPath:当前node进程的执行路径,如:/usr/local/bin/node;
memoryUsage():node进程内存的使用情况,rss代表ram的使用情况,vsize代表总内存的使用大小,包括ram和swap;
heapTotal,process.heapUsed:分别代表v8引擎内存分配和正在使用的大小。
argv:这是一个数组,数组里存放着启动这个node.js进程各个参数和命令代码;
uptime():包含当前进程运行的时长(秒);
getgid():获取或者设置group id;
setuid():获取或者设计user id;
cwd():当前工作目录;
exit(code=0):kill当前进程;
kill(pid, signal=‘SIGTERM‘):发出一个kill信号给指定pid;
nextTick(callback):异步执行callback函数;
umask([mask]) :设置进程的user mask值;
// 进程退出时执行 process.on('exit', function(code) { // 进程退出之后将不再执行事件循环,所有回调函数的代码不会被执行 setTimeout(function() { console.log('This will not run'); }, 0); console.log('About to exit with code:', code); }); // 注册了uncaughtException事件来捕捉系统异常,否则主事件循环的异常会把整个node进程宕掉 process.on('uncaughtException', function (err) { console.log('Caught exception: ' + err); }); setTimeout(function () { console.log('This will still run.'); }, 500); nonexistentFunc();// 调用未定义的函数nonexistentFunc,所以会抛出异常 console.log('This will not run.'); process.nextTick(function(){console.log('tick')});
输出:
事件
exit: 当process退出时触发
uncaughtException: 异常事件,使本node.js进程中断的异常
Signal: 自定义事件
例如:
process.on(‘SIGNAL_ONE‘, function(data){
console.log(data);
process.exit(0);
});//监听自定义事件
process.emit(‘SIGNAL_ONE‘, ‘Bye‘);// 触发自定义事件
控制台
process.stdout 控制台输出流
process.stdin 控制台输入流
子进程
child_process模块提供了四个创建子进程的函数,分别是spawn,exec,execFile和fork。
其中spawn是最原始的创建子进程的函数,其他三个都是对spawn不同程度的封装。
spawn只能运行指定的程序,参数需要在列表中给出,相当于execvp系统函数;
而exec可以直接运行复杂的命令。
原型如下:
child_process.spawn(command, [args], [options]);
child_process.exec(command, [options], callback);
exec的实现原理是启动了一个系统shell来解析参数。
fork函数用于直接运行Node.js模块,在父进程与子进程直接建立一个IPC管道,用于父子进程之间的通信。