gpt4 book ai didi

python - Windows 中的信号处理

转载 作者:可可西里 更新时间:2023-11-01 11:52:45 28 4
gpt4 key购买 nike

在 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)

当这个进程运行时,我只是将 SIGINT 从其他一些 python 进程发送到这个进程,

os.kill(pid,SIGINT)

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

有人可以帮我解决这个问题吗。这是 Windows 中的限制吗,因为在 Linux 中同样可以正常工作。

提前致谢。

最佳答案

当您按下 CTRL+C 时,进程会收到一个 SIGINT 并且您正在正确地捕获它,否则它会抛出一个 KeyboardInterrupt 错误。

在 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

注意:在 Python3.x 上测试过,它应该也适用于 2.x。

关于python - Windows 中的信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26061814/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com