2024-05-29 03:02:54 发布
网友
在How can I add signal handlers to a shell written in Py3k/Python?中,我有一些信号处理程序,它们似乎在执行操作,然后让默认操作通过。对于一个具体的实例,如果我点击control-Z,它将显示信号处理程序指定的消息,然后(不需要的)继续挂起进程。在
如何(如果可能的话)显示一条消息然后忽略一个信号?在
您的按键可能会提高SIGSTOP而不是{}。 在终端中运行stty -a,以确定分配给ctrl+z的确切信号。在
SIGSTOP
stty -a
ctrl+z
根据维基百科(可能还有手册页)^{} and ^{} are different。 SIGSTP被发送到进程,因此可以被拦截,而{}被操作系统接收,因此无法被拦截。在
SIGSTP
CTRL-Z不是一个信号,它是一个组合键。在Windows上,CTRL-Z将发送一个EOF,这也不是一个信号,所以我假设您是指在Unix上,因为大多数unixshell将在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!
您的按键可能会提高}。
在终端中运行
SIGSTOP
而不是{stty -a
,以确定分配给ctrl+z
的确切信号。在根据维基百科(可能还有手册页)^{} and ^{} are different 。
}被操作系统接收,因此无法被拦截。在
SIGSTP
被发送到进程,因此可以被拦截,而{CTRL-Z不是一个信号,它是一个组合键。在Windows上,CTRL-Z将发送一个EOF,这也不是一个信号,所以我假设您是指在Unix上,因为大多数unixshell将在CTRL-Z上发送一个信号,即SIGTSTP信号。在
更改SIGTSTP的处理程序可以正常工作:
相关问题 更多 >
编程相关推荐