【发布时间】:2009-04-22 05:51:21
【问题描述】:
有时当我运行我的代码时,当我通过 Ctrl+\ 终止程序时会生成一个核心转储文件。文件名的格式为core.*。程序没有突然终止,也没有分段错误。我相信是SIGQUIT 而不是SIGABRT 或SIGSEGV。如果我尝试 Ctrl+C 或 Ctrl+Z,则不会生成。
谁能说出为什么只有在按下 Ctrl+\ 时才会生成它?如何避免生成此核心转储文件?核心转储文件有什么用吗?
【问题讨论】:
-
当你说“运行我的代码”时,你是在说你运行make的时候吗?或者当你运行编译后的二进制文件时?
-
只是一个花絮:至少有一个答案解释了为什么 SIGINT 不创建核心但我乍一看没有看到任何关于 SIGTSTP 的讨论(这是 ctrl + z 默认所做的) - 它暂停过程。内置的 shell
jobs将显示暂停的进程。另请参阅help fg(如果使用 bash 至少会起作用)。您也可以通过以下命令生成它:kill -SIGTSTP <pid>。另请注意,您可以重新定义默认发送的控制组合(即:如果您愿意,可以将 SIGTSTP 定义为 ctrl + j)。stty -a将向您显示配置 - 和其他信息。