Убить (как ctrl + c) exec (дочерний процесс) на nodejs - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть следующий код в 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

Iпопробовал следующее в index.js:

child.kill()
child.kill('SIGINT')
process.exit() // This stopped index.js, instead of its child.

обновление: есть ответы?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы присваиваете 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 должно работать.

...