| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import psutil
- from logger import logging
- import time
- def ExitCursor(timeout=5):
- """
- 温和地关闭 Cursor 进程
-
- Args:
- timeout (int): 等待进程自然终止的超时时间(秒)
- Returns:
- bool: 是否成功关闭所有进程
- """
- try:
- logging.info("开始退出Cursor...")
- cursor_processes = []
- # 收集所有 Cursor 进程
- for proc in psutil.process_iter(['pid', 'name']):
- try:
- if proc.info['name'].lower() in ['cursor.exe', 'cursor']:
- cursor_processes.append(proc)
- except (psutil.NoSuchProcess, psutil.AccessDenied):
- continue
- if not cursor_processes:
- logging.info("未发现运行中的 Cursor 进程")
- return True
- # 温和地请求进程终止
- for proc in cursor_processes:
- try:
- if proc.is_running():
- proc.terminate() # 发送终止信号
- except (psutil.NoSuchProcess, psutil.AccessDenied):
- continue
- # 等待进程自然终止
- start_time = time.time()
- while time.time() - start_time < timeout:
- still_running = []
- for proc in cursor_processes:
- try:
- if proc.is_running():
- still_running.append(proc)
- except (psutil.NoSuchProcess, psutil.AccessDenied):
- continue
-
- if not still_running:
- logging.info("所有 Cursor 进程已正常关闭")
- return True
-
- # 等待一小段时间再检查
- time.sleep(0.5)
-
- # 如果超时后仍有进程在运行
- if still_running:
- process_list = ", ".join([str(p.pid) for p in still_running])
- logging.warning(f"以下进程未能在规定时间内关闭: {process_list}")
- return False
-
- return True
- except Exception as e:
- logging.error(f"关闭 Cursor 进程时发生错误: {str(e)}")
- return False
- if __name__ == "__main__":
- ExitCursor()
|