python和c信号处理程序如何一起工作?

时间:2018-12-17 17:43:36

标签: python c linux signals

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信号处理程序。

1 个答案:

答案 0 :(得分:1)

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

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