为什么按Ctrl+\会导致核心转储?

24

当我在Python应用程序中(例如Python Shell)时,按下ctrl + \会导致

>>> Quit (core dumped)
为什么会这样,我应该怎么避免这个问题? 每次我意外按下ctrl + \组合键时,应用程序崩溃非常不方便。

对我而言,它只是退出,但没有转储。我不知道为什么它首先退出,但它转储核心可能表明您的Python安装存在问题。 - Waldheinz
9
CTRL + \ 是发送信号 SIGQUIT 到前台进程的默认快捷键。默认情况下,SIGQUIT 会导致核心转储。更多信息请参阅 man kill。如果您希望,可以从终端首选项中删除此快捷键。 - Maciej Gol
很奇怪,因为例如在nano或vim中时它并不会发生。 - chtenb
2
Nano和Vim需要特别注意拦截^C,^Z和^\。大多数程序都接受默认行为,就像Python一样。 - Robᵩ
这会破坏我的机器上的 sudo,因为以这种方式退出 ipython 会改变 stty 的输出。 - darw
2个回答

40

CTRL-\是Linux键盘上触发QUIT信号的按键。通常情况下,该信号会导致程序终止并转储核心。这是UNIX和Linux的特性,与Python完全无关。(例如,尝试sleep 30然后按CTRL-\键。)

如果您想禁用这个功能,请使用stty命令。

在Python启动之前,在Linux命令行中操作:

stty quit undef

1
虽然这对Python shell有效,但是即使quitundef了,IPython仍然会退出。 - zeawoas

14

Python模块signal非常方便处理这个问题。

import signal

# Intercept ctrl-c, ctrl-\ and ctrl-z
def signal_handler(signal, frame):
    pass
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGQUIT, signal_handler)
signal.signal(signal.SIGTSTP, signal_handler)

只需向信号添加处理程序(在此情况下)不执行任何操作即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接