Python中sighold和sigrelse函数的等价物是什么?
看起来Python的信号模块没有像C语言中的sighold和sigrelse函数那样的功能,这些函数是在signal.h文件里定义的。请问Python有没有类似的功能呢?
非常感谢!
2 个回答
2
在关键部分,暂时“阻止”信号是没有办法的(因为并不是所有的Unix系统都支持这个功能)。
2
在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信号处理要稍微不同一些,不那么异步。