如何在Linux中设置sigalarm重复一遍又一遍?

时间:2016-10-09 13:35:21

标签: python cygwin signals posix

我正在尝试一遍又一遍地报警。

我的处理程序是

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

警报仅工作一次,即使每次我再次设置它。 在我的代码中,我也在孩子工作之后使用sigchld和sys.exit。

我正在用cygwin运行它。

编辑: 我需要编写一个代码,每秒打印“等待”,使用sigalarm而不是循环

我是个白痴,我编辑了错误的代码

1 个答案:

答案 0 :(得分:0)

您将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)