如何在Py3k中,我有一个信号处理程序来阻止信号的默认动作?

时间:2012-11-10 17:02:09

标签: python shell python-3.x signals

How can I add signal handlers to a shell written in Py3k/Python?中,我有信号处理程序似乎行动,然后让默认操作通过。对于一个具体的例子,如果我点击control-Z,它将显示信号处理程序指定的消息,然后(不需要的)继续暂停该过程。

如何(如果可能)显示消息然后忽略信号?

2 个答案:

答案 0 :(得分:0)

您的按键可能会引发SIGSTOP而不是SIGSTP。 在终端运行stty -a以确定分配给ctrl+z的确切信号。

根据维基百科(也可能是手册页)SIGSTP and SIGSTOP are differentSIGSTP被发送到进程,因此可以被拦截,而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!