我正在为FreeBSD上的服务器编写错误处理代码。对于非常严重的错误,我希望通过立即终止来避免数据损坏。这很容易,exit(3)
。在我退出之前,我输出了导致我的相关变量。然而,理想情况下,这种终止将伴随.core
,以便我可以充分调查是什么让我陷入了这种灾难性(并且可能难以复制)的状态。
我如何强制这种情况发生?
答案 0 :(得分:35)
kill -QUIT process_id
将导致正在运行的进程发生核心转储(假设资源限制允许)。
或者看man 3 abort
导致程序自行转储。
已添加:从交互式shell中,可以使用退出键中止正在运行的程序,通常是 Ctrl + \ ,发送SIGQUIT就像更常见的 Ctrl + C 发送SIGINT一样。这与kill -QUIT…
相同,如果你在控制终端上,它就更容易输入。如果您的默认退出密钥不同,请参阅man 1 stty
。
答案 1 :(得分:3)
This帮助了我!
kill -11
总是对我有用。 11是SIGSEGV(无效的内存引用)
答案 2 :(得分:2)
您可能还想看看gcore(1)(http://man.freebsd.org/gcore)。
答案 3 :(得分:1)
关于sles12 ..下面的代码对我有用:
kill -11
先前的建议没有任何作用。