在Windows中,我试图创建一个等待SIGINT信号的python进程。当它收到SIGINT时,我希望它只打印一条消息并等待SIGINT的另一次出现。所以我使用了信号处理程序。
这是我的 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,
os.kill(pid,SIGINT)
.
但是当 signal_receiver.py 收到 SIGINT 时,它只是退出执行。但预期的行为是在处理函数内打印消息并继续执行。
有人可以帮我解决这个问题吗?这是 Windows 中的限制吗,因为在 Linux 中同样可以正常工作。
提前致谢。
当您按 CTRL+C 时,进程会收到 SIGINT 并且您正确捕获了它,否则它会抛出KeyboardInterrupt
error.
在 Windows 上,当time.sleep(10)
被中断,虽然你捕获了SIGINT,但它仍然抛出一个InterruptedError
。只需在 time.sleep 中添加一条 try/ except 语句即可捕获此异常,例如:
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
Note:在 Python3.x 上测试,它也应该在 2.x 上工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)