【问题标题】:How does python and c signal handlers work together?python 和 c 信号处理程序如何协同工作?
【发布时间】:2019-05-18 03:07:56
【问题描述】:

Python 和 C 都允许用户安装信号处理程序。但是,如果 Python 程序调用了 C 代码,并且该 C 代码安装了 C 信号处理程序,那么 Python 程序也为相同的信号安装了 Python 信号处理程序,那么之后该信号将如何处理?

更具体地说,当用户在 Python 中调用 signal.signal 时会发生什么?除了 Python 信号处理程序之外,Python 是否安装了一个 C 信号处理程序来替换旧的 C 信号处理程序?如果是,那么 Python 环境中返回的旧 C 信号处理程序在哪里?

man sigaction 说:

如果oldact 不为NULL,则上一个操作保存在oldact 中。

但是 Python signal.signal 返回旧的 Python 信号处理程序而不是旧的 C 信号处理程序。

【问题讨论】:

  • 它们是在不同的进程中还是你通过 ctypes 调用一个库?
  • @stark 在同一个进程中

标签: python c linux signals


【解决方案1】:

看起来 Python 丢弃了旧的信号处理程序。 Python 确实安装了自己的 C 处理程序 here (Python source code)。此处理程序管理 Python 信号。

PyOS_setsig 确实返回旧的 C 处理程序,但链接的行将其丢弃。 signal.signal 的 Python 实现也返回一个“上一个”处理程序,但它只跟踪一个内部列表(参见变量 Handlers)。它不知道任何 C 处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2017-05-06
    • 2010-10-29
    • 2014-06-12
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多