进程管理
zKing 2018-12-08 Node.js
# 了解 process
process 对象是一个全局变量,提供 Node.js 进程的有关信息以及控制进程。 因为是全局变量,所以无需使用 require(),当然使用了也是没有问题的。
介绍一下常用的 process 参数
const { argv,argv0,execArgv,execPath,env } = process
// 存放 “执行路径、项目路径,命令行执行脚本的后续参数” 的数组
argv.forEach((item, index) => {
console.log(index + ':' + item)
})
console.log('------------------')
console.log(argv0) // 获取 node 的执行路径
console.log('------------------')
console.log(execArgv) // 获取使用 node 命令时所传入的一些参数
console.log('------------------')
console.log(execPath) // argv[0]
console.log('------------------')
console.log(env) // 环境参数
console.log('------------------')
console.log(process.cwd()) // 相当于 pwd ,返回执行 node 命令所在文件夹
// 等待当前事件队列完成后再触发,
// 慎重使用,一般用 setImmediate 来代替
// setImmediate 是放在新队列的头部来执行的,proccess.nextTick 是放在当前队列的尾部来执行的
console.log('------------------')
process.nextTick(() => {
console.log('nextTick')
})
# 了解子进程 child_process
一般使用process对象管理自身,使用child_process模块创建和管理子进程。
这里简单写下 子进程 向 父进程 传送数据的示例
child.js
let result = [1, 2, 3]
process.send({result})
process.exit(0)
main.js
const http = require('http')
const child_process = require("child_process")
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'application/json');
res.setHeader('charset', 'UTF-8');
let child = child_process.fork('child.js');
child.on("message", data => {
res.end(JSON.stringify(data));
})
})
server.listen(3000, () => {
console.log("http://localhost:3000")
})