【问题标题】:Why does pressing Ctrl-backslash result in core dump?为什么按 Ctrl-反斜杠会导致核心转储?
【发布时间】:2013-10-08 13:07:58
【问题描述】:

当我在 python 应用程序(例如 python shell)中时,按Ctrl\ 会导致

>>> Quit (core dumped)

为什么会这样,我该如何避免这种情况? 如果我不小心按Ctrl\ 时应用程序退出,非常不方便。

【问题讨论】:

  • 对我来说它只会退出,但不会转储。我不知道它为什么首先退出,但它转储核心可能表明你的 python 安装有问题。
  • CTRL + \ 是将SIGQUIT 发送到前台进程的默认快捷方式。默认情况下,SIGQUIT 会导致核心转储。更多在man kill。如果您愿意,可以从终端首选项中删除快捷方式。
  • 这很奇怪,因为我在 nano 或 vim 中不会发生这种情况。
  • Nano 和 Vim 特别注意拦截 ^C、^Z 和 ^\。大多数程序都接受默认行为,就像 Python 一样。

标签: python coredump backslash ctrl


【解决方案1】:

CTRL-\ 是生成 QUIT 信号的 Linux 键。通常,该信号会导致程序终止并转储核心。这是 UNIX 和 Linux 的一个特性,与 Python 完全无关。 (例如,尝试 sleep 30 后跟 CTRL-\。)

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

从 Linux 命令行,在 Python 启动之前:

stty quit undef

【讨论】:

  • 虽然这适用于 python shell,但即使quit 已被undefed,ipython 仍然退出
【解决方案2】:

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)

只需将处理程序添加到(在这种情况下)什么都不做的信号。

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 2020-08-31
    • 2021-11-16
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多