【问题标题】:nodejs.How do subprocess destroyed along with the masterprocess?nodejs.子进程如何随主进程一起销毁?
【发布时间】:2020-05-28 07:17:08
【问题描述】:

import { spawn } from 'child_process'
let subproc = spawn( xxx/xxx.exe, [])

这段代码打开了一个新的xxx.exe进程。

如何在主进程退出后自动销毁子进程

【问题讨论】:

  • 这不是默认行为吗?
  • 主进程退出后子进程仍在运行

标签: node.js vue.js electron


【解决方案1】:
import findProcess from 'find-process'
import { exec } from 'child-process'

const stop = async () => {
    const yourSubProcessName = 'xxx'
    if(process.platform === 'win32') {
        // Consider OS type
        // This is just for WinOS
        exec(`taskkill /IM ${yourSubProcessName}`)
    } else {
        // Other OS
        exec(`kill xxx`)
    }

    while(1) {
        const processList = await findProcess('name', yourSubProcessName)
        if(processList.length === 0) break
    }

}

app.on('will-quit', async () => {
    await stop()
});
...

这是在主应用程序关闭时终止子进程。 然后监听will-quit 事件并终止处理程序上的子进程。

此代码是通过 ProcessName 关闭子流程,但您可以根据需要进行更改。

并且您应该考虑您正在运行的操作系统类型。

【讨论】:

  • 谢谢皮卡丘。不过这个方案很暴力,emm..不过是最简单的。如果没有更好的办法,我就用这个方案。谢谢皮卡丘
  • 因为子进程没有退出,will-quit不能被触发。我应该听app.on('quit'()=>{})
  • @gao.xiangyang 是的,很高兴听到这个消息。实际上,这个will-quit 事件会在退出前触发。但如果这不起作用。你可以用你的情况。谢谢你告诉我
  • 如果子进程有其他子进程,使用taskkill /F /IM ${yourSubProcessName} /T是不可行的,我可以使用taskkill /pid ${pid} /T /F。我参考了 Casper Beyer 的问题 [Can't kill child process on Windows ](stackoverflow.com/questions/32705857/…希望这个问题可以帮助以后遇到问题的人。题外话:我的英语很差。所有的词都是谷歌翻译的。希望你能理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多