Я пытаюсь убить дочерний процесс, запущенный на моем сервере. По сути, дочерний процесс запускает код johnny-five, который я написал в онлайн-терминале в React, на моем сервере. Когда я запускаю дочерний процесс, код работает отлично, но если я хочу убить дочерний процесс, я не могу сделать это, не останавливая сервер. Я пытался сделать это с помощью Control-C и .exit(), но ни один из них не работает.
codeRouter
.post('/codeAPI', (req, res) => {
console.info(req.body)
let fileName = `johnnyFiles/${req.body.currentFile}`
fs.writeFileSync(fileName, req.body.currentCode, (err) => {
if (err) throw err
})
let id = shortid.generate()
let fileObject = {
fileName: req.body.currentFile,
fileContents: req.body.currentCode,
ID: id
}
data = [fileObject, ...data]
fs.writeFileSync('data/fileData.json', JSON.stringify(data), (err) => {
if (err) throw err
})
res.json(data)
///////////////////////////////////////////
let nodeSpawn = spawn('node', [fileName], {
//detached: true,
shell: true
})
nodeSpawn.stdout.on('data', (data) => {
console.info("OUTPUT", data.toString())
})
nodeSpawn.stderr.on('data', (data) => {
console.info("ERRORS", data.toString())
})
nodeSpawn.on('exit', (code) => {
console.info(`Child exited with code ${code}`)
nodeSpawn.kill('SIGINT')
})
})`



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать командную строку Linux.
Чтобы увидеть, как запущенные процессы используют команду, используйте:
pgrep node
Чтобы убить процесс, вы можете использовать:
kill <pid>
Или принудительно отключить
kill -9 <pid>
Или, если вы хотите убить все процессы узла
kill $(pgrep node)
Почему вы выполняете
.kill('SIGINT')при обработке событияexit? Это событие срабатывает, когда дочерний процесс завершается. Если он не выйдет, конечно,.kill()никогда не будет вызван.