zweizhao.github.io

项目,文章,随笔,博客,Markdown,个人网站,人生感悟。

View on GitHub

exec(command, [options], callback)

执行脚本

参数 含义
command 脚本
callback 回调(err, stdout, stderr)

options参数|含义

child_process = require 'child_process'

child_process.exec "git a; git cm #{process.argv.splice(2)[0]}", (err, stdout, stderr) -> console.log stdout

spawn(command, [args], [options])

创建进程,具体逻辑在 on 监听处理

const fs = require('fs');
const child_process = require('child_process');
 
for(var i=0; i<3; i++) {
   var workerProcess = child_process.spawn('node', ['support.js', i]);
 
   workerProcess.stdout.on('data', function (data) {
      console.log('stdout: ' + data);
   });
 
   workerProcess.stderr.on('data', function (data) {
      console.log('stderr: ' + data);
   });
 
   workerProcess.on('close', function (code) {
      console.log('子进程已退出,退出码 '+code);
   });
}
options参数 含义  
cwd String 子进程的当前工作目录  
env Object 环境变量键值对  
stdio Array String 子进程的 stdio 配置
detached Boolean 这个子进程将会变成进程组的领导  
uid Number 设置用户进程的 ID  
gid Number 设置进程组的 ID  

fork(modulePath, [args], [options])

options 参数与 spawn 一致,modulePath 为子进程的路径,如:path/to/child.js

parent.js

console.log('parent pid: ' + process.pid);
var fork = require('child_process').fork;
//fork方法返回的是子进程
var child = fork('./child.js');
console.log('fork return pid: ' + child.pid);
child.on('message', function(msg){
    console.log('parent get message: ' + JSON.stringify(msg));
});
child.send({key: 'parent value'});

child.js

console.log('child pid: ' + process.pid);
process.on('message', function(msg){
    console.log('child get message: ' + JSON.stringify(msg));
});
process.send({key: 'child value'});