Home > Article > Web Front-end > How to learn the process and child_process modules in node (detailed tutorial)
This article mainly introduces the node process and child_process module study notes. Now I share them with you and give them a reference.
After struggling with the process for a week, I finally understood the obscure and difficult document, and am ready to share my understanding with everyone. I also hope that everyone can point out some opinions
Process The concept of
#In Node.js every application is an instance object of the process class.
Use the process object to represent the application. This is a global object through which you can obtain the properties of the Node.jsy application and the user and environment running the program. methods and events.
Several important attributes in the process
stdin standard input readable stream
stdout standard input writable stream
stderr standard error output stream
argv terminal input parameter array
env operating system environment information
pid application process id
stdin and stdout
process.stdin.on('data', (chunk) => { process.stdout.write('进程接收到数据' + chunk) })
Run result
argv
console.log(process.env)##env: Enter export NODE_ENV=develop
console.log(process.env.NODE_ENV) //develop# in the mac terminal ##Methods of process
say() //方法不存在 process.on('uncaughtException',function(err){ console.log('捕获到一个未被处理的错误:',err); });
The child process is the focus of today, I also have some things that I don’t quite understand, and I hope I can communicate with you more
The background of child_processIn Node.js, there is only one thread to perform all operations. If a certain When an operation consumes a lot of CPU resources, subsequent operations need to wait.
In Node.js, a child_process module is provided, through which multiple child processes can be started, memory space can be shared between multiple child processes, and information exchange can be achieved through mutual communication of child processes.
The child_process module gives node the ability to create child processes at will. The official document of node gives four methods for the child_proces module. Mapping to the operating system actually creates child processes. But for developers only, the APIs of these methods are a little different
child_process.exec(command[, options][, callback]) starts the
child process to execute the shell command, which can be done through the callback parameter Get the script shell execution result
child_process.execfile(file[, args][, options][, callback])
child_process.spawn(command[, args][, options]) only executes a shell command and does not need to obtain the execution results
child_process.fork(modulePath[, args][, options] ]) You can use node
to execute the .js file, and there is no need to obtain the execution results. The child process coming out of fork must be the node processSyntax: child_process.spawn(command, [args], [options])
const { spawn } = require('child_process') const path = require('path') let child1 = spawn('node', ['test1.js', 'yanyongchao'], { stdio: ['pipe', 'pipe', 'pipe'], // 三个元素数组 下面会详解 cwd: __dirname, 子进程工作目录 env: process.env, 环境变量 detached: true // 如果为true,当父进程不存在时也可以独立存在 })
stdio is an array used to set standard input, standard output, and error output. Personal understanding
pipe: Establish a pipe between the parent process and the child process
Main process code
const path = require('path') const { spawn } = require('child_process') let p = spawn('node', ['childs_t.js'], { cwd: path.join(__dirname, 'childs'), stdio: ['pipe', 'pipe', process.stderr] }) p.stdout.on('data', (data) => { console.log(data.toString()) }) // 这里用stdout原因: 子进程的数据流与常规理解的数据流方向相反, // stdin:写入流,stdout、stderr:读取流。
Child process code
process.stdout.write('asd')
If you put it in stdio A stream, process.stdout, process.stdin
Main process code
const { spawn } = require('child_process') const path = require('path') // 如果放的是一个流,则意味着父进程和子进程共享一个流 const p = spawn('node', ['child_t.js'], { cwd: path.join(__dirname, 'childs'), stdio: [process.stdin, process.stdout, process.stderr] })
Sub process code
process.stdout.write('asd') //控制台会输出asdipc
Main Process code
const path = require('path') const { spawn } = require('child_process') let p = spawn('node', ['child_t.js'], { cwd: path.join(__dirname, 'childs'), stdio: ['ipc', 'pipe', 'pipe'] }) p.on('message', (msg) => { console.log(msg) }) p.send('hello chhild_process')
Child process code
process.on('message', (msg) => { process.send('子进程' + msg) }) // child.send(message,[sendHandle]);//在父进程中向子进程发送消息 // process.send(message,[sendHandle]);//在子进程中向主进程发送消息detached mode
const { spawn } = require('child_process')
const fs = require('fs')
const path = require('path')
let out = fs.openSync(path.join(__dirname, 'childs/msg.txt'), 'w', 0o666)
let p = spawn('node', ['test4.js'], {
detached: true, //保证父进程结束,子进程仍然可以运行
stdio: 'ignore',
cwd: path.join(__dirname, 'childs')
})
p.unref()
p.on('close', function() {
console.log('子进程关闭')
})
p.on('exit', function() {
console.log('子进程退出')
})
p.on('error', function(err) {
console.log('子进程1开启失败' + err)
})
const { fork } = require('child_process') const path = require('path') let child = fork(path.join(__dirname, 'childs/fork1.js')) child.on('message', (data) => { console.log('父进程接收到消息' + data) }) child.send('hello fork') child.on('error', (err) => { console.error(err) })
Child process code
process.on('message', (m, setHandle) => { console.log('子进程接收到消息' + m) process.send(m) //sendHandle是一个 net.Socket 或 net.Server 对象 })exec starts the child process
// exec同步执行一个shell命令
let { exec } = require('child_process')
let path = require('path')
// 用于使用shell执行命令, 同步方法
let p1 = exec('node exec.js a b c', {cwd: path.join(__dirname, 'childs')}, function(err, stdout, stderr) {
console.log(stdout)
})
上面是我整理给大家的,希望今后会对大家有帮助。 相关文章:let { execFile } = require('child_process')
let path = require('path')
let p1 = execFile('node', ['exec.js', 'a', 'b', 'c'], {
cwd: path.join(__dirname, 'childs')
}, function(err, stdout, stderr) {
console.log(stdout)
})
The above is the detailed content of How to learn the process and child_process modules in node (detailed tutorial). For more information, please follow other related articles on the PHP Chinese website!