nodejs之子进程child_process介绍

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();


留言: