gpt4 book ai didi

python - 在 Python 中捕获 SIGINT 以外的信号

转载 作者:太空狗 更新时间:2023-10-29 12:40:55 25 4
gpt4 key购买 nike

我正在编写一个交互式 Python CLI 工具。当发出特定信号时,我想让该工具进入“特殊文本输入模式”。我目前正确处理 SIGINT 并正常退出。

问题:

  1. 我应该使用什么信号进入这个模式? (不妨碍其他功能的东西)
  2. 捕获此信号的最佳方法是什么?
  3. 这个信号在 POSIX 系统中是如何触发的?在 Windows 中有什么不同吗?

最佳答案

POSIX 恰好指定了两个用户定义信号:

SIGUSR1 = 30
SIGUSR2 = 31

这两个信号不会由任何操作触发,这意味着您可以明确地为它们定义处理程序并根据您的目的发出这些信号。

import signal

def handler(signum):
if signum == signal.SIGUSR1:
print('user defined interrupt!')

signal.signal(signal.SIGUSR1, handler)

这些信号已明确提供给用户,因此最好在您的应用程序中引发和处理这些信号。


要使用代码显式地发出此信号,您​​必须使用:

import os
os.kill(os.getpid(), signal.SIGUSR1)

其中os.getpid()返回当前进程的进程ID。将其替换为您希望终止的进程的 ID(如果它不是当前进程的话)。

此外,我应该提到 SIGUSR1/2 在 Windows 中不受支持。文档提到,除了 SIGABRTSIGFPESIGILLSIGINTSIGSEGV,或 SIGTERM,不能发出其他信号。在任何其他情况下都会引发 ValueError。

关于python - 在 Python 中捕获 SIGINT 以外的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com