【发布时间】:2020-05-28 07:17:08
【问题描述】:
import { spawn } from 'child_process'
let subproc = spawn( xxx/xxx.exe, [])
这段代码打开了一个新的xxx.exe进程。
如何在主进程退出后自动销毁子进程
【问题讨论】:
-
这不是默认行为吗?
-
主进程退出后子进程仍在运行
import { spawn } from 'child_process'
let subproc = spawn( xxx/xxx.exe, [])
这段代码打开了一个新的xxx.exe进程。
如何在主进程退出后自动销毁子进程
【问题讨论】:
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 关闭子流程,但您可以根据需要进行更改。
并且您应该考虑您正在运行的操作系统类型。
【讨论】:
will-quit不能被触发。我应该听app.on('quit'()=>{})
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/…希望这个问题可以帮助以后遇到问题的人。题外话:我的英语很差。所有的词都是谷歌翻译的。希望你能理解。