Windows中的信号处理
在Windows中,我试图创建一个等待SIGINT信号的python进程。当它接收到SIGINT时,我希望它只是打印一条消息并等待SIGINT的另一个出现。所以我使用了信号处理程序。Windows中的信号处理
这是我的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时,它只是退出执行。但预期的行为是在处理函数内部打印消息并继续执行。
有人可以帮我解决这个问题。它在windows中是一个限制,因为在linux中同样工作正常。
在此先感谢。
当您按下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协同工作。
它不适用于Windows 7,Python 2.7 – wap26 2016-07-18 13:28:33
Windows没有信号。 Python正在模拟它们,但可能不支持跨进程。考虑使用其中一种本地IPC方法。 – 2014-09-28 00:37:11
[根据此答案](http://*.com/a/26053962/886887)Python不支持跨进程信号。 – 2014-09-28 00:44:27