exec执行的进程继续运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了exec执行的进程继续运行相关的知识,希望对你有一定的参考价值。

通过使用Node Js我正在执行一个进程,一切正常工作只有问题是进程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}`)
})

以上是关于exec执行的进程继续运行的主要内容,如果未能解决你的问题,请参考以下文章

Linux下进程的创建(system(); fork(); exec*())

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

golang exec 在正在运行的二进制/进程上执行命令

linux父子进程执行问题

Linux系统编程——进程替换:exec 函数族