2

如何将信号处理程序添加到用 Py3k/Python 编写的 shell 中?,我有信号处理程序似乎在起作用,然后让默认操作通过。对于一个具体的例子,如果我按下 control-Z,它将显示信号处理程序指定的消息,然后(不需要的)继续暂停进程。

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

4

2 回答 2

0

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

根据维基百科(可能还有手册页)SIGSTP并且SIGSTOP是不同的SIGSTP被发送到进程,因此可以被拦截,而SIGSTOP被操作系统拾取,因此不能被拦截。

于 2012-11-10T18:39:40.533 回答
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!
于 2012-11-10T18:43:00.357 回答