在 mac os 和 python 中设置 SIGKILL 处理程序时出现 OSError

Apo*_*los 5 python signals macos-mojave

你好,我正在尝试使用 python 模块设置 SIGKILL 处理信号signal,但出现 OSError 异常。

蟒蛇:3.7.5

操作系统:MacOS 莫哈维

class MyClass:
    def __init__(self, *args, **kwargs):
        signal.signal(signal.SIGKILL, self.gracefull_shutdown)
        signal.signal(signal.SIGTERM, self.gracefull_shutdown)


    def gracefull_shutdown(self, signum, frame):
        # gracefull_shutdown code here

Run Code Online (Sandbox Code Playgroud)

这给了我以下内容

signal.signal(signal.SIGKILL, self.gracefull_shutdown)
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/signal.py", line 47, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
OSError: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)

SIGTERM 处理有效(通过注释掉SIGKILL处理程序)。我读到 MacOS 支持 SIGKILL,不是吗?

小智 4

man 7 signal,它说

信号 SIGKILL 和 SIGSTOP 无法被捕获、阻止或忽略。

另请参阅如何在 python 中处理 os.system sigkill 信号?