We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
node:child_process 模块用于创建子进程。
node:child_process
主进程和子进程是不同的进程,每个进程至少有一个线程,一个线程只属于一个进程。因此使用子进程可以实现多线程并行工作。
有4种方法异步创建子进程:
exec
execFile
spawn
fork
以及除 fork 外,3种同步方法创建子进程:
execSync
execFileSync
spawnSync
同步方法创建子进程,将会阻塞主进程,直到子进程结束。
exec( command, options, callback ) 方法运行后,先生成一个shell,然后在shell中运行command,符合开发者使用shell的习惯。
exec( command, options, callback )
exec 是 execFile 对参数用法的简单封装,见child_process源码。
const childProcess = require('child_process') childProcess.exec('node -v', {}, (error, stdout, stderr)=>{ process.stdout.write(stdout) })
运行后在控制台打印出 node 版本号
execFile(file, args, options, callback) 方法运行后,默认不生成shell,从环境变量中找到file并运行。
execFile(file, args, options, callback)
API及参数名很像是执行文件用的,但实际运行是由 spawn 实现,区别是一些预设参数,以及运行结束后执行回调 callback。使用 exec、execFile 的好处主要是可以简单地设置回调函数 callback ,无需再像child_process源码一样多处设置监听。
callback
const childProcess = require('child_process') childProcess.execFile('node', ['-v'], {}, (error, stdout, stderr)=>{ process.stdout.write(stdout) })
spawn(command, args, options) 运行后返回子进程实例,借此可以与子进程通信、读取子进程的输出、结束子进程等,是功能最多的创建子进程方法。
spawn(command, args, options)
const childProcess = require('child_process') const child = childProcess.spawn('node', ['-v'], {stdio: 'inherit'}) child.on('exit', ()=> console.log('child exits.'))
运行后在控制台打印出 node 版本号,并在运行结束时打印 child exits.
child exits.
fork(modulePath, args, options) 运行效果相当于 spawn('node', [modulePath, ...args], options)。
fork(modulePath, args, options)
spawn('node', [modulePath, ...args], options)
fork 创建的子进程,其 child.stdio 默认值相当于 inherit 而不是 spawn 的默认值 pipe,即控制台输出将打印到主进程。
child.stdio
inherit
pipe
准备运行用的JS文件如下
// app.js console.log(process.argv.slice(2))
使用 fork 创建子进程
const childProcess = require('child_process') const child = childProcess.fork('app.js', ['hello'], {}) child.on('exit', ()=> console.log('child exits.'))
运行后在控制台打印出传入的参数 ['hello'],并在运行结束时打印 child exits.
['hello']
The text was updated successfully, but these errors were encountered:
No branches or pull requests
node:child_process
模块用于创建子进程。主进程和子进程是不同的进程,每个进程至少有一个线程,一个线程只属于一个进程。因此使用子进程可以实现多线程并行工作。
创建子进程
有4种方法异步创建子进程:
exec
execFile
spawn
fork
以及除
fork
外,3种同步方法创建子进程:execSync
execFileSync
spawnSync
同步方法创建子进程,将会阻塞主进程,直到子进程结束。
exec
exec( command, options, callback )
方法运行后,先生成一个shell,然后在shell中运行command,符合开发者使用shell的习惯。exec
是execFile
对参数用法的简单封装,见child_process源码。运行后在控制台打印出 node 版本号
execFile
execFile(file, args, options, callback)
方法运行后,默认不生成shell,从环境变量中找到file并运行。API及参数名很像是执行文件用的,但实际运行是由
spawn
实现,区别是一些预设参数,以及运行结束后执行回调callback
。使用exec
、execFile
的好处主要是可以简单地设置回调函数callback
,无需再像child_process源码一样多处设置监听。运行后在控制台打印出 node 版本号
spawn
spawn(command, args, options)
运行后返回子进程实例,借此可以与子进程通信、读取子进程的输出、结束子进程等,是功能最多的创建子进程方法。运行后在控制台打印出 node 版本号,并在运行结束时打印
child exits.
fork
fork(modulePath, args, options)
运行效果相当于spawn('node', [modulePath, ...args], options)
。fork
创建的子进程,其child.stdio
默认值相当于inherit
而不是 spawn 的默认值pipe
,即控制台输出将打印到主进程。准备运行用的JS文件如下
使用
fork
创建子进程运行后在控制台打印出传入的参数
['hello']
,并在运行结束时打印child exits.
参考资料
The text was updated successfully, but these errors were encountered: