core.*
命名的核心转储文件。程序不是突然终止,也没有出现分段错误。我认为这是因为收到了SIGQUIT
信号,而不是SIGABRT
或SIGSEGV
信号。如果我尝试使用Ctrl+C或Ctrl+Z,则不会生成此文件。有人能告诉我为什么只有按下Ctrl+\才会生成该文件吗?如何避免生成该核心转储文件?这个核心转储文件有什么用处吗?
当程序发生故障时,由于操作系统内的错误而终止导致该进程转储核心。最典型的原因是程序访问了无效的指针值。如果您有零星的转储,那么很可能是使用了未初始化的指针。
您能否发布导致故障的代码?除了模糊的概括之外,没有实际看到代码很难猜出问题所在。
至于什么是核心转储,请查看此维基百科文章:
ctrl + \会向进程发送信号SIGQUIT。根据POSIX.1标准,此信号的默认操作是生成一个核心转储文件。
SIGILL、SIGABRT、SIGFPE和SIGSEGV是系统生成核心转储文件的其他情况。
请在您的系统上参考“man 7 signal”以获取更多详细信息。
当进程接收到某些信号时,例如SIGSEGV(内核在访问超出其地址空间的内存时发送的信号),会生成核心转储。通常这是由于指针使用错误导致的。这意味着程序中存在错误。
核心转储对于查找错误很有用。它是问题发生时进程内存的图像,因此可以使用诸如gdb之类的调试器来查看程序当时的运行情况。调试器甚至可以访问程序中变量的值(有时)。
您可以使用ulimit命令防止生成核心转储。
这是一个辅助调试不正常应用程序的工具。它很大,因为它包含了应用程序在崩溃时所有物理内存的内容,以及所有线程的寄存器状态和堆栈。
当内核因为某些恶意行为(如生成分段错误或总线错误)而终止应用程序时,会生成这些内容。
SIGQUIT
的作用。如果您不想生成它,请改用 Ctrl + C(SIGINT
)。如果所涉及的程序未响应于 SIGINT
但您需要从终端杀死它,则您或开发人员可能存在问题。
设计为不使用 Ctrl + C 终止的程序应仍对 SIGTERM
做出合理响应,可以通过另一个终端使用 kill -TERM ...
触发它。如果一切都失败了,SIGKILL
将强制立即终止程序。
jobs
将向您显示已暂停的进程。还可以查看help fg
(如果至少使用bash,则会起作用)。您还可以通过命令kill -SIGTSTP <pid>
*生成此内容。还要注意,您可以重新定义默认发送的控制组合(也就是说,如果您想,可以将SIGTSTP定义为ctrl + j)。 *stty -a
*将向您显示配置和其他信息。 - Pryftan