javascript - 如何在 Windows 中正确杀死由 Node.js/Electron 生成的 child_process?

标签 javascript python node.js electron

我正在使用 Electron、Python 和 Flask 在 Windows 中开发应用程序。

我用

require('child_process').spawn('python', [_script,port]) 

启动一个child_process,但我无法正确终止这个child_process。

当 Electron 应用程序关闭时,仍有一个名为“python”的进程在后台运行。

我几乎尝试了所有方法,例如 p.kill(),或使用 taskkill。

这是Python代码:

from flask import Flask
import logiccode as mine

app = Flask(__name__)

@app.route('/hello')
def hello_world():
   return mine.HelloWorld()


if __name__ == '__main__':
   app.run(debug = True)
//create
pyProc = require('child_process').spawn('python', [_script,port])
    if (pyProc != null) {
        console.log('child process success\n')
        console.log(pyProc.pid);
    }

//kill

if(process.platform=='win32'){
        require('child_process').spawn('taskkill',['/pid','/f','/t',pyProc.pid]);
    }else{
        pyProc.kill();
        pyProc = null
        pyPort = null
    }

如果代码中有错误,请告诉我如何正确杀死这个child_process。

最佳答案

我没有看到任何 Windows 特定分支的原因,我假设您在 pyProc.kill() 不起作用时添加了它。

kill默认为 SIGTERM。我希望它能起作用,但如果你发现它不起作用,你可以使用 SIGKILL 的核选项来代替。正如 signal(7) 中所述:

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

所以:

//kill
pyProc.kill('SIGKILL');
pyProc = null
pyPort = null

关于javascript - 如何在 Windows 中正确杀死由 Node.js/Electron 生成的 child_process?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449252/

相关文章:

javascript - 在 Ag-grid 中编辑标题

javascript - 将 javascript 警报显示为 toast

javascript - PHP 驱动的 API 如何验证真正的客户端(引用者)跨域(知道 header 可以被欺骗)?

python - 使用 Matplotlib 在线图旁边绘制颜色条

python - 使用 ec2 创建存储在 s3 上的图像缩略图并在完成时与 rails 通信的优雅方式?

node.js - cMalformedResponse:Webhook错误(206),同时看似有效的Webhook响应-Node.js中对Google Dialogflow应用的操作

javascript - Scoket.IO v1.0.x 基于 token 的身份验证 - 无法传递 token ?

javascript - Angular ng-show、ng-hide 和 ng-if 未按预期工作

使用 map 和 lambda 的 python 字典赋值

node.js - 两个Git存储库,一个Docker镜像