在nodejs上阻止(如ctrl + c)exec(子进程)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (77)

我在index.js中有以下代码:

var child = exec(
    'node app.js --board=' + data.data.board + ' --link=' + data.data.link,
    function (error, stdout, stderr) {
        if (error) console.log('exec error: ' + error)
        if (stderr) console.log('stderr: ' + stderr)
    }
)
.stdout.on('data', function(log_data) {
    console.log(log_data)
    socket.emit('listener', { ty: 'user_p_logs', num: data.num, log: log_data })
    fn(true)
})

这是代码run app.js,但我无法阻止这个子进程index.js

我尝试了以下内容index.js

child.kill()
child.kill('SIGINT')
process.exit() // This stopped index.js, instead of its child.
提问于
用户回答回答于

你要分配的child是返回值.stdout.on,它是stdout事件发射器,而不是child进程。你需要它作为子进程。不要过度链接。

var child = exec(
    'node app.js --board=' + data.data.board + ' --link=' + data.data.link,
    function (error, stdout, stderr) {
        if (error) console.log('exec error: ' + error)
        if (stderr) console.log('stderr: ' + stderr)
    }
);
child.stdout.on('data', function(log_data) {
    console.log(log_data)
    socket.emit('listener', { ty: 'user_p_logs', num: data.num, log: log_data })
    fn(true)
});

然后,child.kill应该工作。

扫码关注云+社区

领取腾讯云代金券