信号处理在Windows(Signal Handling in Windows)

2019-10-21 01:23发布

在Windows中,我试图创造一个Python进程当它收到SIGINT我希望它只是打印一条消息,并等待SIGINT.So的另一个发生我使用的信号处理程序,等待SIGINT signal.And。

这是我signal_receiver.py代码。

import signal, os, time

def handler(signum, frame):
    print 'Yes , Received', signum

signal.signal(signal.SIGINT, handler)
print 'My process Id' , os.getpid()

while True:
    print 'Waiting for signal'
    time.sleep(10)

当这个进程在运行,我刚刚从其他Python过程中使用发送SIGINT这个procees,

os.kill(pid,SIGINT)

但是,当signal_receiver.py收到SIGINT它只是退出执行。但预期的行为是打印的处理函数里面的消息,并继续执行。

有人可以帮我解决这个issue.Is它在窗口的限制,因为同样在linux下正常工作。

提前致谢。

Answer 1:

当您按下CTRL + C,进程将收到SIGINT和你正确地抓住它,因为否则会抛出KeyboardInterrupt错误。

在Windows上,当time.sleep(10)被中断,虽然你赶上SIGINT,它仍然抛出一个InterruptedError 。 只需添加一个try /除了内部time.sleep语句来捕获这个异常,例如:

import signal
import os
import time

def handler(signum, frame):
    if signum == signal.SIGINT:
        print('Signal received')

if __name__ == '__main__':
    print('My PID: ', os.getpid())
    signal.signal(signal.SIGINT, handler)

    while True:
        print('Waiting for signal')
        try:
            time.sleep(5)
        except InterruptedError:
            pass

:Python3.x测试,它也应该在2.x协同工作。



文章来源: Signal Handling in Windows