process
process.env
// NODE_ENV=production node app.js
// NODE_ENV=dvelopment node app.js
if(process.env.NODE_ENV === 'production'){
console.log('生产环境');
}else{
console.log('非生产环境');
}
process.nextTick(fn)
- process.nextTick将放在node事件循环的下次tick中
- process.nextTick(fn)比setTimeout的性能要更高
// 执行结果: s1 s2 ss
console.log('s1');
process.nextTick(function(){
console.log('ss');
});
console.log('s2');
process.argv
即获取命令行:node + 文件 + 参数, 如下:
// NODE_ENV=development node argv.js --env production
process.argv.forEach(function(val, index, array) {
console.log('参数' + index + ': ' + val);
});
// 参数传入env为production,但更改process.env.NODE_ENV为development
process.cwd()\process.chdir()
// 获取当前路径
console.log('Starting directory: ' + process.cwd());
try {
// 切换到tmp下,没有即创建
process.chdir('/tmp');
console.log('New directory: ' + process.cwd());
}catch (err) {
console.log('chdir: ' + err);
}
process.connect()与process.disconnect()
var child_process = require('child_process');
child_process.fork('./connectedChild.js', {
stdio: 'inherit'
});
// connectedChild.js
console.log( 'process.connected: ' + process.connected );
process.disconnect();
console.log( 'process.connected: ' + process.connected );
// 输出:
// process.connected: true
// process.connected: false
标准输入输出信息和错误信息的处理 process.stdin、process.stdout、process.stderr
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
var chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write(`data: ${chunk}`);
}
});
process.stdin.on('end', () => {
process.stdout.write('end');
});
系统相关信息
- 运行情况/资源占用情况: process.uptime()、process.memoryUsage()
- 进程信息: process.pid\title
- 用户/组信息:process.seteuid(id)、 process.geteuid().........
- 环境信息: process. platform:返回关于平台描述的字符串,比如 darwin、win32 等。
- 处理器信息: process.arch: 返回当前系统的处理器架构(字符串),比如'arm', 'ia32', or 'x64'。
子进程相关功能
const spawn = async (...args) => {
const { spawn } = require('child_process');
return new Promise(resolve => {
const proc = spawn(...args)
proc.stdout.pipe(process.stdout)
proc.stderr.pipe(process.stderr)
proc.on('close', () => {
resolve()
})
})
}
// 执行spawn('npm', ['install'], { cwd: `./${name}` })
1.exec - child_process.exec 使用子进程执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式一次性返回。exec方法会从子进程中返回一个完整的buffer。默认情况下,这个buffer的大小应该是200k。如果子进程返回的数据大小超过了200k,程序将会崩溃,同时显示错误信息“Error:maxBuffer exceeded”。你可以通过在exec的可选项中设置一个更大的buffer体积来解决这个问题,但是你不应该这样做,因为exec本来就不是用来返回很多数据的方法。
2.spawn - child_process.spawn 使用指定的命令行参数创建新进程。spawn 会返回一个带有stdout和stderr流的对象。你可以通过stdout流来读取子进程返回给Node.js的数据。stdout拥有’data’,’end’以及一般流所具有的事件。当你想要子进程返回大量数据给Node时,比如说图像处理,读取二进制数据等等,你最好使用spawn方法。
3.fork - child_process.fork 是 spawn()的特殊形式,用于在子进程中运行的模块,如 fork(‘./son.js’) 相当于 spawn(‘node’, [‘./son.js’]) 。与spawn方法不同的是,fork会在父进程与子进程之间,建立一个通信管道,通过process.send和on("message")通信。