Python和C都允许用户安装信号处理程序。但是,如果一个Python程序调用C代码,并且该C代码安装了一个C信号处理程序,那么Python程序也会为同一个信号安装一个Python信号处理程序,那么以后该如何处理该信号呢?你知道吗
更具体地说,当用户在Python中调用signal.signal
时会发生什么?除了Python信号处理程序之外,Python是否还安装了一个C信号处理程序来替换旧的C信号处理程序?如果是这样,那么在Python环境中返回的旧C信号处理程序在哪里?你知道吗
man sigaction
说:
If
oldact
is non-NULL, the previous action is saved inoldact
.
但是Python signal.signal
返回旧的Python信号处理程序,而不是旧的C信号处理程序。你知道吗
看起来Python抛弃了旧的信号处理程序。Python确实安装了自己的C处理程序here (Python source code)。这个处理程序管理Python信号。你知道吗
PyOS_setsig
确实返回旧的C处理程序,但链接行会丢弃它。signal.signal
的Python实现也返回一个'previous'处理程序,但它只跟踪一个内部列表(请参见变量Handlers
)。它不知道任何C处理程序。你知道吗相关问题 更多 >
编程相关推荐