Windows 中的信号处理

2024-05-08

在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(使用前将#替换为@)

Windows 中的信号处理 的相关文章

随机推荐

  • zend框架中的一个模块中的多个控制器

    你好 我是 zend Framework2 2 0 的新手 我想创建一个带有多个控制器的模块我已经从 github 下载了 Album 模块并且它工作正常 现在我想在其中添加更多控制器 下面我显示了模块中文件的文件夹结构 module Al
  • 获取 emr-ddb-hadoop.jar 将 DynamoDB 与 EMR Spark 连接

    我有一个 DynamoDB 表 需要将其连接到 EMR Spark SQL 才能对该表运行查询 我获得了带有发行标签 emr 4 6 0 和 Spark 1 6 1 的 EMR Spark Cluster 我指的是文档 使用 Spark 分
  • 将键值对添加到数组中的所有对象

    我想向数组中的所有对象添加一个键 值参数 eg var arrOfObj name eve name john name jane 现在我想向所有对象添加一个新参数 isActive 以便生成的数组如下所示 eg name eve isAc
  • 嵌套重组 - Django

    我有一个包含以下字段的模型 日期 员工 和 计划时间 每个员工对于不同的日期都有不同的计划工作时间 我正在尝试构建我的模板 其中员工按行列出 他们的计划工作时间列在正确的相应日期下的列中 像这样的东西 https i stack imgur
  • 如何避免 OrderBy - 内存使用问题

    假设我们有一个很大的点列表List
  • SizedBox 与 Padding、Margin 的区别

    我们应该使用 Margin Padding 或 SizedBox 来在小部件之间提供间距吗 小部件的 Margin 和 padding 可以完成工作 那么 SizedBox 的用途是什么 SizedBox creates space bet
  • Haskell,optparse-generic 的未命名命令行参数

    我在用着optparse 通用 https hackage haskell org package optparse generic解析名为的程序的命令行参数example 我有一个带有命名字段的数据类型 记录语法 例如 data Exam
  • 更新AWS S3过期时间

    我想知道如何延长密钥的有效期 我指的不是访问对象的签名 URL 而是密钥本身 我将 AWS 设置为存储桶中的所有对象应在 90 天后过期的规则 在大多数情况下 这就是我希望发生的事情 有时我需要将单个密钥的使用寿命最多再延长 90 天 事实
  • Spring 中 JavaConfig 相对于 XML 配置的优势?

    早些时候 配置曾经在代码中硬编码 后来它被外部化到 property 文件 为了避免硬编码值 避免为了更改配置而更改代码 等等 然后它转移到 XML 为了为了更加标准化 无错误等 现在 在阅读 Spring 3 中的 Configurati
  • 您应该在 Windows 8 应用程序的哪个位置编写“隐私策略”代码?

    我的应用程序未通过认证 原因是 4 1 1 如果您的应用程序具有网络功能 则必须有隐私声明 您必须在应用程序的说明页面以及 Windows 设置超级按钮中显示的应用程序设置中提供对隐私政策的访问权限 他们在说什么 什么描述 如何设置 Win
  • JBoss 中的 jndi.properties

    有没有办法配置 JNDI 以便查找首先检查 localhost 如果没有找到匹配的名称 则会自动发现其他 jndi 服务器 我对文档的理解是 这是使用集群时的默认行为 16 2 2 客户端配置 http docs jboss org jbo
  • Xpath 和通配符

    我尝试了几种组合但没有成功 该数据的完整 xpath 是 id detail row seek 37878 td问题是每个节点的数字部分 37878 都会发生变化 因此我无法使用 foreach 循环遍历节点 有没有办法使用通配符并将 xp
  • github 操作未收到机密

    我看过其他答案 但似乎都不起作用 我想我只是想用 Github Actions 做一些非常简单的事情 只需让 access key 可用于我的 github 操作 而不将其放入我的 github 存储库中 所以我认为我们可以创造action
  • 如何使用 Codable 解析此 JSON?

    我一直在尝试从我的中解析这个对象JSON并不断收到此错误 错误 类型不匹配 Swift Array Swift DecodingError Context codingPath debugDescription 本应解码数组 但找到了字典
  • Genymotion Google Nexus 6P 7.0.0 与 Open_Gapps 手臂 7.0.0

    With Genymotion 2 8 0 我已经安装了谷歌 Nexus 6P 7 0 0API 级别为 24 的设备 启动设备后 我刷新了 ARM 虚拟转换器并重新启动了设备 然后 我从下载 open gapps用于 Playstore
  • 网格属性不适用于网格容器内的元素

    我正在尝试定位嵌套li ul li ul li 在最顶层创建的 CSS 网格上ul 还没有爱 它不起作用 也许这是不可能的 或者我错过了什么 orgChart ul orgChartLevel1 display grid grid temp
  • JMeter:tearDown Thread Group的目的是什么

    我想了解JMeter中tearDown Thread Group的实际用法 在什么场景下可以使用tearDown Thread Group 根据提供的帮助JMeter 拆解线程组 http jmeter apache org userman
  • Java 中的逻辑回归

    我们需要用 Java 进行逻辑回归 我们在 Python 中使用了这段代码http blog smellthedata com 2009 06 python logistic regression with l2 html http blo
  • python:发送邮件,在“with”块内时失败

    我想知道为什么这段代码 test smtplib SMTP smtp gmail com 587 test ehlo test starttls test ehlo test login address passw test sendmai
  • Windows 中的信号处理

    在Windows中 我试图创建一个等待SIGINT信号的python进程 当它收到SIGINT时 我希望它只打印一条消息并等待SIGINT的另一次出现 所以我使用了信号处理程序 这是我的 signal receiver py 代码 impo