项目运行到浏览器,任务栏退出HbuilderX
- 发布:2023-04-27 13:49
- 更新:2025-12-22 18:57
- 阅读:721
产品分类: HbuilderX
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: macOS Ventura 13.3.1
HBuilderX版本号: 3.7.9
操作步骤:
预期结果:
node服务终止,内存释放
node服务终止,内存释放
实际结果:
mac退出HbuilderX后没有释放内存,仍有大量node进程在后台运行,以此往复导致内存占用较高系统卡顿
mac退出HbuilderX后没有释放内存,仍有大量node进程在后台运行,以此往复导致内存占用较高系统卡顿
bug描述:
mac退出HbuilderX后没有释放内存,仍有大量node进程在后台运行,以此往复导致内存占用较高系统卡顿
指望官方来处理是不可能的,给个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()