我正在编写一个交互式 Python CLI 工具。当发出特定信号时,我想让该工具进入“特殊文本输入模式”。我目前正确处理 SIGINT 并正常退出。
问题:
- 我应该使用什么信号进入这个模式? (不妨碍其他功能的东西)
- 捕获此信号的最佳方法是什么?
- 这个信号在 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 中不受支持。文档提到,除了 SIGABRT
、SIGFPE
、SIGILL
、SIGINT
、SIGSEGV
,或 SIGTERM
,不能发出其他信号。在任何其他情况下都会引发 ValueError。
关于python - 在 Python 中捕获 SIGINT 以外的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783409/