NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:
标准输入、标准输出及标准错误输出的接口
child.stdin 获取标准输入
child.stdout 获取标准输出
child.stderr 获取标准错误输出
获取子进程的PID:child.pid
提供生成子进程的重要方法:child_process.spawn(cmd, args=[], [options])
提供直接执行系统命令的重要方法:child_process.exec(cmd, [options], callback)
提供杀死进程的方法:child.kill(signal='SIGTERM')
error事件
error在以下情况触发:
1. 子进程不能被生成
2. 子进程不能被杀死
3. 向子进程发送消息失败。
注意,exit事件在error发生后可能还会被触发,所以如果你同时监听了这两个事件,记得去避免函数被调用两次。
exit事件
exit事件在子进程结束时发生,这是子进程的stdio流可以依旧是打开的。
close事件
close事件在子进程的stdio关闭时发生,这是与exit的区别,因为有可能多个进程共享一个stdio。
下面是一个简单的守护进程,node ./bin/www 命令是启动了expressjs的服务器,如果服务器遇到异常,这个node进程就会退出,web服务就此终止,如果有了这个守护进程,当检测到异常或者退出信号,就会重新的启动一个node服务。
var child = null; function startServer() { var spawn = require('child_process').spawn; child = spawn('node', ['./bin/www']); child.stdout.on('data', function (data) { console.log(data.toString()); }); child.stderr.on('data', function (data) { console.log(data.toString()); }); child.on('exit', function (code) { console.log('子进程已关闭,代码:' + code); child = startServer(); }); child.on('error', function(code, signal){ console.log(code); child.kill(signal); }); return child; } startServer();