C语言中sighold和sigrelse函数的Python等效项是什么?

时间:2020-03-06 14:31:26  来源:igfitidea点击:

看来,使用signal.h,Python信号模块与C中发现的sighold和sigrelse函数没有任何相似之处。是否有任何类似的Python替代品?

非常感谢!

解决方案

无法暂时性地从关键部分``阻塞''信号(因为并非所有Unix版本都支持此功能)。

https://docs.python.org/library/signal.html

在Python中没有直接绑定。通过ctypes访问它们很容易。这是一个例子。

import ctypes, signal
libc = ctypes.cdll.LoadLibrary("libc.so.6")
libc.sighold(signal.SIGKILL)
libc.sigrelse(signal.SIGKILL)

我不熟悉这些调用的用法,但是要知道Python的信号处理程序与C的工作方式不同。当将Python代码添加到信号回调时,信号被捕获在解释器的C侧并排队。解释器偶尔会因内部管理(和线程切换等)而中断。在中断期间,将调用该信号的Python处理程序。

这么说,请注意,Python的信号处理比普通的C信号处理程序少异步一些。