Сигналы ОС — это механизм для асинхронной коммуникации между процессами и ОС. В 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 для работы с сигналами ОС, но требует аккуратного использования. Для простых сценариев остановки/перехвата команд достаточно стандартного функционала, для сложных — лучше рассмотреть альтернативы.