Как настроить sigalarm на повторение снова и снова в Linux?

#python #cygwin #signals #posix

#python #cygwin #сигналы #posix

Вопрос:

Я пытаюсь заставить alarm работать снова и снова.

Мой обработчик

 def handler_SIGALRM(signum, frame):
    print "waiting"
    signal.alarm(2)
  

Сигнал тревоги срабатывает только один раз, хотя каждый раз, когда я устанавливаю его снова.
В моем коде я также использую sigchld и sys.exit после работы дочернего элемента.

Я запускаю его с помощью cygwin.

РЕДАКТИРОВАТЬ: мне нужно написать код, который будет печатать «ожидание» каждую секунду, с помощью sigalarm, а не циклов

Я идиот, я отредактировал неправильный код

Ответ №1:

Вы поставили свой signal.alarm(2) в неправильное место. Смотрите мой пример ниже.

 import time
import signal

class TimeoutException (Exception):
    pass

def signalHandler (signum, frame):
    raise TimeoutException ()

timeout_duration = 5

signal.signal (signal.SIGALRM, signalHandler)




for i in range (5):
    signal.alarm (timeout_duration)
    try:
        """Do something that has a possibility of taking a lot of time 
        and exceed the timeout_duration"""
        time.sleep (20)
    except TimeoutException as exc:
        print "Notify your program that the timeout_duration has passed"
    finally:
        #Clean out the alarm
        signal.alarm (0)
  

Комментарии:

1. Мне нужно использовать sigalarm (а не циклы) для записи «ожидания» каждую секунду. Я установил его впервые в основном.

2. Привет. Я идиот. Мой код не работал, потому что я отредактировал другой код