mitmdump 退出不完全

pyqt5 + mitmdump 我现在在做一个抓包程序,内部用的mitmdump, 现在问题是程序结束,mitmdump 并没有退出 还在占用端口,求解决方式
import json
import multiprocessing
import os
import sys
import threading
import time

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QEventLoop, QTimer, Qt, QThread

from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QMainWindow, QApplication, QTableWidgetItem
from SpWindow import Ui_Form
from EditProxy import edit_system_proxy
import atexit
import startmitmdump


@atexit.register
def exit_exec():
    edit_system_proxy(False, "127.0.0.1", "8848")
    

class EmittingStr(QtCore.QObject):
    textWritten = QtCore.pyqtSignal(str)  # 定义一个发送str的信号

    def write(self, text):
        self.textWritten.emit(str(text))


class ThreadTable(QThread):
    update_userinfo = QtCore.pyqtSignal()

    def __init__(self, parent=None, *args, **kwargs):
        super(ThreadTable, self).__init__(parent,*args,**kwargs)

    def run(self):
        cnt = 0
        while True:
            cnt += 1
            self.update_userinfo.emit()  # 发射信号
            time.sleep(0.3)


class Stats(QMainWindow, Ui_Form):
    def __init__(self):
        super(Stats, self).__init__()
        self.setupUi(self)
        sys.stdout = EmittingStr(textWritten=self.outputWritten)
        sys.stderr = EmittingStr(textWritten=self.outputWritten)
        self.init()

    def init(self):
        print('Begin')
        loop = QEventLoop()
        QTimer.singleShot(1000, loop.quit)
        loop.exec_()

        self.bth_start.clicked.connect(self.start_cli)
        self.bth_clear_log.clicked.connect(self.bth_clear_log_p)
        print("修改系统代理为 127.0.0.1:9999")
        edit_system_proxy(True, "127.0.0.1", "9999")
        # 启动mitmdump
        self.mitm = multiprocessing.Process(target=startmitmdump.run)
        self.mitm.start()
        self.refer_user()
        self.table_thread = ThreadTable()
        self.table_thread.start()
        self.table_thread.update_userinfo.connect(self.refer_user)

        # pass

    def refer_user(self):
        item = QtWidgets.QTableWidgetItem()
        item.setCheckState(QtCore.Qt.Checked)
        for idx, filename in enumerate(os.listdir("user")):
            f = open("user/" + filename, "r", encoding="utf-8")
            userinfo = f.read()
            f.close()
            usj = eval(userinfo)
            name = usj.get("nickname")
            openid = usj.get("openid")
            phone = usj.get("phone")
            self.table_user.setItem(idx, 3, QTableWidgetItem(item))
            self.table_user.setItem(idx, 2, QTableWidgetItem(phone))
            self.table_user.setItem(idx, 1, QTableWidgetItem(openid))
            self.table_user.setItem(idx, 0, QTableWidgetItem(name))


    def start_cli(self):
        print("启动成功")

    def bth_clear_log_p(self):
        self.textBrowser.clear()

    def outputWritten(self, text):
        cursor = self.textBrowser.textCursor()
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertText(text)
        self.textBrowser.setTextCursor(cursor)
        self.textBrowser.ensureCursorVisible()

    def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
        edit_system_proxy(False, "127.0.0.1", "9999")
        self.mitm.close()
        sys.exit(app.exec_())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Stats()
    win.show()
    sys.exit(app.exec_())

 

退出改用 os._exit(0) 试试,如果 os._exit(0) 不行,就用 os._exit(1)

import os
.
.
.
.
os._exit(0)