Egoism
Egoism
  • 发布:2023-04-27 13:49
  • 更新:2025-12-22 18:57
  • 阅读:721

【报Bug】mac退出HbuilderX后,运行的node服务不会终止仍在后台导致内存占用过大

分类:HBuilderX

产品分类: HbuilderX

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOS Ventura 13.3.1

HBuilderX版本号: 3.7.9

操作步骤:

项目运行到浏览器,任务栏退出HbuilderX

预期结果:

node服务终止,内存释放

实际结果:

mac退出HbuilderX后没有释放内存,仍有大量node进程在后台运行,以此往复导致内存占用较高系统卡顿

bug描述:

mac退出HbuilderX后没有释放内存,仍有大量node进程在后台运行,以此往复导致内存占用较高系统卡顿

2023-04-27 13:49 负责人:无 分享
已邀请:
DCloud_HB_WDL

DCloud_HB_WDL

感谢反馈,关于Node内存的问题,我们内部正在排查修复。

DeLei_Zhang

DeLei_Zhang

遇到同样的问题了,还占用了我的端口

warmthLinn

warmthLinn

快一年了,这个问题还没修复嘛

6***@qq.com

6***@qq.com

指望官方来处理是不可能的,给个Python脚本来关闭,mac新建文件保存,不要文件后缀,命令行chmod x 给个执行文件,每次关闭hbx,点一下这个程序,主动关闭

#!/usr/bin/env python3  
# -*- coding: utf-8 -*-  
"""  
Node进程检测与关闭工具(MacOS可执行版,自动关闭无需确认)  
"""  
import subprocess  
import re  
import os  

def get_node_processes():  
    """  
    获取所有正在运行的Node.js进程,返回格式:[(pid, command), ...]  
    """  
    node_processes = []  
    try:  
        # 执行ps命令,获取所有包含node的进程信息  
        result = subprocess.check_output(  
            ["ps", "aux"],  
            encoding="utf-8"  
        )  
        # 按行分割输出  
        lines = result.split("\n")  
        # 正则匹配进程行中的PID和命令(包含node的部分)  
        pattern = re.compile(r"\s*(\d+)\s+.+?\s+(.+node.+)")  
        for line in lines:  
            match = pattern.search(line)  
            if match:  
                pid = int(match.group(1))  
                command = match.group(2).strip()  
                # 排除当前Python进程(防止误杀)  
                if pid != os.getpid():  
                    node_processes.append((pid, command))  
    except subprocess.CalledProcessError as e:  
        print(f"执行ps命令失败:{e}")  
    return node_processes  

def kill_process(pid, force=False):  
    """  
    终止指定PID的进程  
    :param pid: 进程ID  
    :param force: 是否强制终止(使用SIGKILL信号)  
    :return: 终止结果  
    """  
    try:  
        if force:  
            # 强制终止(相当于kill -9)  
            subprocess.run(["kill", "-9", str(pid)], check=True)  
            return f"进程 {pid} 已被强制终止"  
        else:  
            # 正常终止(相当于kill)  
            subprocess.run(["kill", str(pid)], check=True)  
            return f"进程 {pid} 已被正常终止"  
    except subprocess.CalledProcessError as e:  
        return f"终止进程 {pid} 失败:{e}(可能需要sudo权限)"  
    except Exception as e:  
        return f"发生未知错误:{e}"  

def main():  
    """主函数:检测并自动关闭Node进程(无需确认)"""  
    print("===== Node.js进程检测与关闭工具(MacOS自动版) =====")  
    print("正在检测Node.js后台进程...")  
    node_processes = get_node_processes()  

    if not node_processes:  
        print("\n未检测到正在运行的Node.js进程")  
        input("\n按回车键退出...")  
        return  

    # 展示检测到的进程  
    print(f"\n共检测到 {len(node_processes)} 个Node.js进程:")  
    for i, (pid, command) in enumerate(node_processes, 1):  
        print(f"{i}. PID: {pid} | 命令: {command}")  

    # ========== 核心修改:直接关闭,无需询问 ==========  
    print("\n开始自动关闭进程...")  
    # 可配置项:是否强制关闭(force=True 表示强制关闭,对应kill -9;False为正常关闭)  
    force_kill = False  # 如需强制关闭,改为 True 即可  
    for pid, _ in node_processes:  
        result = kill_process(pid, force_kill)  
        print(result)  

    input("\n按回车键退出...")  

if __name__ == "__main__":  
    main()

要回复问题请先登录注册