Сигналы ОС — это механизм для асинхронной коммуникации между процессами и ОС. В Python для работы с ними используется модуль signal. Вот как это работает:
import signal
signal.SIGINT (Interrupt) — Ctrl+Csignal.SIGTERM (Terminate) — запрос на завершениеsignal.SIGKILL (Kill) — немедленное завершение (нельзя перехватить)signal.SIGALRM (Alarm) — таймерimport signal
import time
def handler(signum, frame):
print(f"Получен сигнал {signum}")
# Какая-то логика обработки
if signum == signal.SIGINT:
print("Завершаем работу...")
exit(0)
# Регистрируем обработчик
signal.signal(signal.SIGINT, handler)
print("Ожидаем сигнал...")
while True:
time.sleep(1)
handler — функция-обработчик принимает:
signum — номер сигналаframe — текущий стек вызововSIGKILL)def timeout_handler(signum, frame):
raise TimeoutError("Время выполнения истекло")
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(5) # Таймер на 5 секунд
signal.signal(signal.SIGINT, signal.SIG_IGN)
signal.signal(signal.SIGINT, signal.SIG_DFL)
Для сложных сценариев лучше использовать:
asyncio + loop.add_signal_handler()модуль signal предоставляет базовый API для работы с сигналами ОС, но требует аккуратного использования. Для простых сценариев остановки/перехвата команд достаточно стандартного функционала, для сложных — лучше рассмотреть альтернативы.