2

我在这里有一个情况,几天前我能够在我的目标板上看到核心哑文件,我通过在我的 /etc/profile 中添加“ulimit -c unlimited”来提供核心转储生成支持。但是后来有人告诉我

这只会影响从登录 shell 启动的程序,而不是由 systemd 启动的进程/服务,etc/limits 将是设置这些默认值的正确位置。

所以我更改了 /etc/limits 文件并添加了“ulimit -c unlimited”行。但现在我看不到 Coredumped 文件

我正在运行 kill -9 $$ 来生成分段错误,然后它会像之前一样生成 coredump 文件。

我们尝试更改“/proc/sys/kernel/core_pattern”文件并显式运行 ulimit -c unlimited,但它也没有成功

我们哪里做错了??

4

4 回答 4

8

kill -9不会生成核心文件。该命令kill -l给出了支持的信号列表。 kill -6或者kill -SIGABRT应该产生一个核心文件。以及大多数其他信号,例如kill -BUS,kill -SEGV等。

于 2013-09-12T20:26:25.303 回答
3

kill -11 总是对我有用。11 是 SIGSEGV(无效的内存引用)

于 2015-04-27T16:07:31.617 回答
2

您必须首先启用用户限制设置以确保可以创建核心文件。

ulimit -c unlimited

应用程序用户必须在您在同一会话中启动应用程序之前运行。此设置由应用程序继承,因此在启动应用程序之前设置的 ulimit 就是应用程序的 ulimit 设置(除非启动脚本更改它)。

于 2015-07-18T06:48:49.010 回答
0

除了其他答案之外,您还可以使用gcore(1)生成某个正在运行的进程的核心转储。

但是如果使用kill(1)命令(或底层的kill(2)系统调用,例如来自一些临时程序),我建议使用(解除阻塞后abort(3)发送给自身SIGABRT的信号),如文档中所述信号(7)

请注意,程序通常可以禁止核心转储,例如通过调用setrlimit(2)并将其RLIMIT_CORE设置为 0 或处理或忽略某些信号(例如sigaction(2) ...)。

于 2015-07-18T06:54:08.020 回答