杀死分叉子进程的正确方法

时间:2015-12-06 05:36:33

标签: node.js asynchronous

我正在使用Express应用程序,我需要分配一个昂贵的流程,并在完成后终止该流程。

我已经在Stack Overflow和搜索中看到了不同的方法,但我想知道在使用child_process.fork(...)方法时这是否是正确的方法。

// route handler - /routes/api.js

exports.redirect = function(req, res) {
    var campaignId = req.query.campaignId,
        destination = req.query.destination,
        worker = child_process.fork(__dirname + '/../workers/redirect');

    worker.send({
        campaignId: campaignId,
        destination: destination
    });

    worker.on('message', function(msg) {
        this.kill();
    });

    return res.redirect(destination);
};



// forked process file referenced as "worker" - /workers/redirect.js

var db = require('../db'),
    RedirectedUrlService = require('../services/redirect'),
    logger = require('../logger');

process.on('message', function(data) {
    RedirectedUrlService.create(data, function(error, redirectedUrl) {
        if (error) {
            logger.log('error', error);
        }

        process.send('done');
    });
});

如果我:ps ax | grep node,我没有看到任何额外的工作人员引用,所以它似乎正在做我期望的事情。

这是正确的,我的代码仍然是非阻塞的吗?或者通过向父母发送消息来发出kill(),我是否完全打败了创建分支的目的?

1 个答案:

答案 0 :(得分:1)

在您的子进程中,使用process.exit(0);