簡體   English   中英

如何在 windows 中正確殺死由 node.js/electron 生成的 child_process?

[英]How can I kill a child_process spwaned by node.js/electron correctly in windows?

我正在使用 Electron、Python 和 Flask 在 ZAEA23489CE3AACDB43406EBB28E0Z 中開發應用程序。

我用

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)說的那樣:

無法捕獲,阻止或忽略信號SIGKILL和SIGSTOP。

所以:

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

希望現在還不算太晚,但我遇到了同樣的問題,無法殺死 flask 的原因是因為調試模式設置為 True。 只需調用 app.run(),節點就會殺死 flask。

if __name__ == '__main__':
   app.run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM