pyqt关闭时,取得关闭事件:
# Ui操作
class MainUi(QMainWindow, Ui_Form):
send_config_signal = pyqtSignal(object)
send_train_signal = pyqtSignal(object)
def __init__(self, parent=None):
# [....]
def closeEvent(self, event):
result = QMessageBox.question(self,
"Confirm Exit...",
"Are you sure you want to exit ?",
QMessageBox.Yes | QMessageBox.No)
event.ignore()
if result == QMessageBox.Yes:
event.accept()
os.kill(os.getpid(), signal.SIGTERM) # 主动发出关闭信号
而 zerorpc,需要关注关闭信号:
def server_run():
s = zerorpc.Server(TrainServerRPC())
s.bind("tcp://0.0.0.0:4242")
def stop_server():
s.stop()
sys.exit(0)
gevent.signal_handler(signal.SIGINT, stop_server) # 接收ctrl+c 信号
gevent.signal_handler(signal.SIGTERM, stop_server) # SIGTERM 关闭程序信号 # 命令行数据 kill pid 时的信号
s.run()
关键地方就是使用:
os.kill 与 信号 signal.SIGTERM 的配合使用