通过使用NodeJ我正在执行一个进程,即使父应用程序被杀/关闭,只有问题是进程exe继续运行。
例如杀死进程的代码
require('child_process').exec(require('./globalconfig').CMD_BASE_PATH + 'taskkill.exe /im finder.exe /F', function (error, stdout, stderr) {
if (error) {
require('./loggerHelper').logger.error(error)
}
})
由此“finder.exe”被杀死但如果我观察任务管理器然后“taskkill.exe”继续运行。我猜想杀死finder.exe后taskkill.exe应该终止,为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:1)
使用exec
生成一个shell以在Windows上启动所需命令process.env.ComSpec
或cmd.exe
。这会在node
和正在启动的进程之间添加一个额外的层。尽管对于流程可能仍在运行的原因并不完整,但使用exec
确实会为问题提供更多区域。
使用spawn
允许父node
进程直接控制并将信号传递给子进程。
const { spawn } = require('child_process')
const { CMD_BASE_PATH } = require('./globalconfig')
const find = spawn(`${CMD_BASE_PATH}taskkill.exe`, ['/im', 'finder.exe', '/F'])
find.stdout.on('data', data => {
console.log('stdout: %s', data)
})
find.stderr.on('data', data => {
console.log('stderr: %s', data)
})
find.on('close', code => {
if ( code !== 0 ) console.error(`Finder exited with error: ${code}`)
})