node.js - exec 执行的进程继续运行

标签 node.js electron

通过使用 NodeJs,我正在执行一个进程,一切都工作正常,唯一的问题是进程 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 应该终止,为什么会发生这种情况以及如何解决这个问题?

最佳答案

使用exec生成一个 shell 来启动所需的命令,在 Windows 上可以是 process.env.ComSpeccmd.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}`)
})

关于node.js - exec 执行的进程继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49104666/

相关文章:

javascript - Electron 无法与网络语音 API 配合使用?

node.js - 在哪里可以找到VSCode版本与Electron版本匹配的表?

electron - 选择应从 Electron 应用程序的Webview中允许哪些弹出窗口

node.js - super 账本-资源管理器 : not showing all peers in explorer

javascript - 在 Electron 项目中使用多个 JS 文件

javascript - 如果主窗口隐藏,router.push electro-vue 将不起作用

javascript - 快速处理函数参数执行

javascript - 使用同一实例建立多对多关系

javascript - 在 Mocha 中正常工作测试所需的 setTimeout 包装

javascript - 缩短公会角色列表