Spaces:
Sleeping
Sleeping
File size: 3,797 Bytes
494c89b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
"""
Process utilities - общие функции для работы с процессами
"""
import subprocess
import platform
import time
from typing import Optional
def is_process_running(process_name: str) -> bool:
"""
Проверяет запущен ли процесс по имени.
Args:
process_name: Имя процесса (например 'chrome', 'python')
Returns:
True если процесс запущен
"""
try:
os_type = platform.system().lower()
if os_type == 'windows':
# На Windows добавляем .exe если нет
if not process_name.lower().endswith('.exe'):
process_name = f"{process_name}.exe"
result = subprocess.run(
['tasklist', '/FI', f'IMAGENAME eq {process_name}'],
capture_output=True, text=True
)
return process_name.lower() in result.stdout.lower()
else:
result = subprocess.run(
['pgrep', '-f', process_name],
capture_output=True
)
return result.returncode == 0
except Exception:
return False
def wait_for_process_exit(process_name: str, timeout: int = 30) -> bool:
"""
Ожидает завершения процесса.
Args:
process_name: Имя процесса
timeout: Максимальное время ожидания в секундах
Returns:
True если процесс завершился, False если таймаут
"""
for _ in range(timeout):
if not is_process_running(process_name):
return True
time.sleep(1)
return False
def kill_process(process_name: str, force: bool = False) -> bool:
"""
Завершает процесс по имени.
Args:
process_name: Имя процесса
force: Принудительное завершение (SIGKILL/-9)
Returns:
True если процесс завершён
"""
os_type = platform.system().lower()
try:
if os_type == 'windows':
if not process_name.lower().endswith('.exe'):
process_name = f"{process_name}.exe"
flags = ['/F'] if force else []
subprocess.run(['taskkill', *flags, '/IM', process_name], capture_output=True)
else:
signal = '-9' if force else '-15'
subprocess.run(['pkill', signal, '-f', process_name], capture_output=True)
return wait_for_process_exit(process_name, timeout=5)
except Exception:
return False
def is_kiro_running() -> bool:
"""
Проверяет запущен ли Kiro IDE.
Returns:
True если Kiro запущен, False иначе
"""
return is_process_running('Kiro')
def kill_kiro(force: bool = False, timeout: int = 10) -> bool:
"""
Завершает процесс Kiro IDE.
Args:
force: Принудительное завершение
timeout: Таймаут ожидания завершения (секунды)
Returns:
True если процесс завершён успешно
"""
os_type = platform.system().lower()
try:
if os_type == 'windows':
flags = ['/F'] if force else []
subprocess.run(['taskkill', *flags, '/IM', 'Kiro.exe'], capture_output=True)
else:
signal = '-9' if force else '-15'
subprocess.run(['pkill', signal, '-f', 'Kiro'], capture_output=True)
return wait_for_process_exit('Kiro', timeout=timeout)
except Exception:
return False
|