【问题标题】:How can I kill a child_process spwaned by node.js/electron correctly in windows?如何在 Windows 中正确杀死由 node.js/electron 生成的 child_process?
【发布时间】:2019-12-18 07:53:13
【问题描述】:

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

我用

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

启动子进程,但我无法正确终止该子进程。

当 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 中的默认命令行有一些限制,您需要以管理员模式打开终端
  • 确实是windows任务管理器要杀掉这个进程,我试试看是不是这个原因。
  • 我尝试使用管理员帐户在 cmd 中运行它,但 python 进程在后台仍然存在.lol

标签: javascript python node.js electron


【解决方案1】:

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

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

信号 SIGKILL 和 SIGSTOP 不能被捕获、阻止或忽略。

所以:

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

【讨论】:

  • 我尝试过这种方式,但问题仍然存在。后台还有一个 Python 进程
  • @KIndoRua - 这表明你不止一次地产生了这个过程。只有分配给pyProc 的最后一个进程会被杀死。肯定是这样的,只有调试才能告诉...祝你好运!
猜你喜欢
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2016-08-24
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多