perf: 重启后终止子进程

This commit is contained in:
Soulter
2024-05-26 21:09:23 +08:00
parent fa44749240
commit 676f258981
5 changed files with 33 additions and 10 deletions
+2 -3
View File
@@ -16,7 +16,7 @@ from persist.session import dbConn
from type.register import RegisteredPlugin
from typing import List
from util.cmd_config import CmdConfig
from util.updator import check_update, update_project, request_release_info
from util.updator import check_update, update_project, request_release_info, _reboot
from SparkleLogging.utils.core import LogManager
from logging import Logger
logger: Logger = LogManager.GetLogger(log_name='astrbot-core')
@@ -344,8 +344,7 @@ class AstrBotDashBoard():
def shutdown_bot(self, delay_s: int):
time.sleep(delay_s)
py = sys.executable
os.execl(py, py, *sys.argv)
_reboot()
def _get_configs(self, namespace: str):
if namespace == "":
+1 -6
View File
@@ -83,6 +83,7 @@ def init():
_global_object = GlobalObject()
_global_object.version = VERSION
_global_object.base_config = cfg
_global_object.logger = logger
logger.info("AstrBot v" + VERSION)
if 'reply_prefix' in cfg:
@@ -441,12 +442,6 @@ async def oper_msg(message: AstrBotMessage,
return
command = command_result[2]
if command == "update latest r":
def update_restart():
py = sys.executable
os.execl(py, py, *sys.argv)
return MessageResult(command_result[1] + "\n\n即将自动重启。", callback=update_restart)
if not command_result[0]:
return MessageResult(f"指令调用错误: \n{str(command_result[1])}")
+4
View File
@@ -1,5 +1,7 @@
from type.register import *
from typing import List
from logging import Logger
class GlobalObject:
'''
@@ -17,6 +19,8 @@ class GlobalObject:
unique_session: bool # 是否开启了独立会话
default_personality: dict
dashboard_data = None
logger: Logger = None
def __init__(self):
self.nick = None # gocq 的昵称
+1 -1
View File
@@ -1,5 +1,5 @@
from astrbot.core import oper_msg
from type.message import AstrMessageEvent, AstrBotMessage
from type.message import *
from type.command import CommandResult
from model.platform._message_result import MessageResult
+25
View File
@@ -6,10 +6,35 @@ except BaseException as e:
has_git = False
import sys, os
import requests
import psutil
from type.config import VERSION
from SparkleLogging.utils.core import LogManager
from logging import Logger
logger: Logger = LogManager.GetLogger(log_name='astrbot-core')
def terminate_child_processes():
try:
parent = psutil.Process(os.getpid())
children = parent.children(recursive=True)
logger.info(f"正在终止 {len(children)} 个子进程。")
for child in children:
logger.info(f"正在终止子进程 {child.pid}")
child.terminate()
try:
child.wait(timeout=3)
except psutil.NoSuchProcess:
continue
except psutil.TimeoutExpired:
logger.info(f"子进程 {child.pid} 没有被正常终止, 正在强行杀死。")
child.kill()
except psutil.NoSuchProcess:
pass
def _reboot():
py = sys.executable
terminate_child_processes()
os.execl(py, py, *sys.argv)
def find_repo() -> Repo: