在如何将信号处理程序添加到用 Py3k/Python 编写的 shell 中?,我有信号处理程序似乎在起作用,然后让默认操作通过。对于一个具体的例子,如果我按下 control-Z,它将显示信号处理程序指定的消息,然后(不需要的)继续暂停进程。
我如何(如果可能)显示一条消息,然后忽略信号?
在如何将信号处理程序添加到用 Py3k/Python 编写的 shell 中?,我有信号处理程序似乎在起作用,然后让默认操作通过。对于一个具体的例子,如果我按下 control-Z,它将显示信号处理程序指定的消息,然后(不需要的)继续暂停进程。
我如何(如果可能)显示一条消息,然后忽略信号?
您的按键可能会提高SIGSTOP
而不是SIGSTP
. 在您的终端运行stty -a
以确定分配给的确切信号ctrl+z
。
根据维基百科(可能还有手册页)SIGSTP
并且SIGSTOP
是不同的。
SIGSTP
被发送到进程,因此可以被拦截,而SIGSTOP
被操作系统拾取,因此不能被拦截。
CTRL-Z 不是一个信号,它是一个组合键。在 Windows 上,CTRL-Z 将发送一个也不是信号的EOF ,所以我假设您的意思是在 Unix 上,因为大多数 Unix shell 将在 CTRL-Z 上发送一个信号,即 SIGTSTP 信号。
更改 SIGTSTP 的处理程序可以正常工作:
>>> import signal
>>> def handler(signum, frame):
... print(signum, frame, "yay!")
...
>>> signal.signal(signal.SIGTSTP, handler)
0
<Here I press CTRL-Z>
>>> 20 None yay!