python和c信号处理程序是如何协同工作的?

2024-06-17 12:58:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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 in oldact.

但是Python signal.signal返回旧的Python信号处理程序,而不是旧的C信号处理程序。你知道吗


Tags: 代码用户程序signalif环境信号is
1条回答
网友
1楼 · 发布于 2024-06-17 12:58:22

看起来Python抛弃了旧的信号处理程序。Python确实安装了自己的C处理程序here (Python source code)。这个处理程序管理Python信号。你知道吗

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

相关问题 更多 >