在How can I add signal handlers to a shell written in Py3k/Python?中,我有信号处理程序似乎行动,然后让默认操作通过。对于一个具体的例子,如果我点击control-Z,它将显示信号处理程序指定的消息,然后(不需要的)继续暂停该过程。
如何(如果可能)显示消息然后忽略信号?
答案 0 :(得分:0)
您的按键可能会引发SIGSTOP
而不是SIGSTP
。
在终端运行stty -a
以确定分配给ctrl+z
的确切信号。
根据维基百科(也可能是手册页)SIGSTP
and SIGSTOP
are different。
SIGSTP
被发送到进程,因此可以被拦截,而SIGSTOP
被操作系统接收,因此无法被截获。
答案 1 :(得分:0)
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!