## 主要修复 - 修复Creo软件运行状态检测失败问题 - 添加完整的软件停止功能支持 - 改进多进程软件的进程管理逻辑 ## 技术改进 - 更新软件配置支持多进程名称检测 - 优化进程停止逻辑,增加超时配置 - 新增 stop_software WebSocket消息类型 - 完善错误处理和日志记录 ## 配置更新 - configs/software_config.yaml: 支持进程名称列表和停止超时 - 添加Revit 2017配置支持 ## 文档更新 - README.md: 更新软件配置说明和API列表 - frontend-api-docs.md: 添加停止软件API文档 - CHECKPOINT.md: 记录修复进展和解决方案 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
77 lines
3.0 KiB
Python
77 lines
3.0 KiB
Python
import sys
|
||
import asyncio
|
||
sys.path.append('app')
|
||
|
||
from core.process_monitor import process_monitor
|
||
|
||
async def status_callback(event_type: str, software_id: str, data: dict):
|
||
"""状态变化回调函数"""
|
||
print(f"📡 事件通知: {event_type} - {software_id}")
|
||
print(f" 数据: {data}")
|
||
|
||
async def test_process_monitor():
|
||
print("=== 测试进程监控器 ===")
|
||
|
||
# 添加回调函数
|
||
process_monitor.add_callback(status_callback)
|
||
|
||
# 测试系统信息获取
|
||
print("\n1. 测试系统信息获取:")
|
||
try:
|
||
system_info = await process_monitor.get_system_info()
|
||
print(f"✅ 系统信息获取成功:")
|
||
print(f" - CPU使用率: {system_info['cpu']['percent']}%")
|
||
print(f" - 内存使用率: {system_info['memory']['percent']}%")
|
||
print(f" - 磁盘使用率: {system_info['disk']['percent']:.1f}%")
|
||
except Exception as e:
|
||
print(f"❌ 系统信息获取失败: {e}")
|
||
|
||
# 测试查找软件进程
|
||
print("\n2. 测试查找软件进程:")
|
||
try:
|
||
software_processes = await process_monitor.find_software_processes()
|
||
print(f"✅ 软件进程查找完成:")
|
||
for software_id, processes in software_processes.items():
|
||
print(f" - {software_id}: 找到 {len(processes)} 个进程")
|
||
for proc in processes:
|
||
print(f" PID: {proc['pid']}, 名称: {proc['name']}")
|
||
except Exception as e:
|
||
print(f"❌ 软件进程查找失败: {e}")
|
||
|
||
# 如果找到了creo进程,添加到监控
|
||
if 'creo' in software_processes and software_processes['creo']:
|
||
print("\n3. 测试添加进程监控:")
|
||
try:
|
||
creo_process = software_processes['creo'][0]
|
||
process_monitor.add_process('creo', creo_process['pid'])
|
||
print(f"✅ 已添加Creo进程到监控: PID {creo_process['pid']}")
|
||
|
||
# 等待一段时间观察监控效果
|
||
print(" 监控中,等待10秒...")
|
||
await asyncio.sleep(10)
|
||
|
||
# 获取进程信息
|
||
process_info = process_monitor.get_process_info('creo')
|
||
if process_info:
|
||
print(f" - 进程状态: {process_info.status}")
|
||
print(f" - CPU使用率: {process_info.cpu_percent}%")
|
||
print(f" - 内存使用率: {process_info.memory_percent}%")
|
||
print(f" - 运行时间: {(process_info.last_check - process_info.start_time).total_seconds():.1f}秒")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 进程监控测试失败: {e}")
|
||
else:
|
||
print("\n3. 未找到Creo进程,跳过监控测试")
|
||
|
||
# 停止监控
|
||
print("\n4. 停止监控:")
|
||
try:
|
||
await process_monitor.stop_monitoring()
|
||
print("✅ 监控已停止")
|
||
except Exception as e:
|
||
print(f"❌ 停止监控失败: {e}")
|
||
|
||
print("\n=== 进程监控器测试完成 ===")
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(test_process_monitor()) |