为什么Coredump文件不在这里生成?

时间:2013-08-21 10:12:46

标签: c shell linux-kernel arm coredump

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

这只会对从登录shell启动的程序产生影响,而不会对systemd启动的进程/服务产生影响,等等/限制将是设置这些默认设置的正确位置。

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

我正在运行kill -9 $$来生成分段错误,而它反过来会像之前那样生成coredump文件。

我们尝试更改“/ proc / sys / kernel / core_pattern”文件并明确地运行ulimit -c unlimited,但它也没有用完

我们做错了什么?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

ulimit -c unlimited

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

但是如果使用kill(1)命令(或基础kill(2)系统调用,例如来自某个特别程序),我建议使用SIGABRTabort(3)发送的信号正如signal(7)中所述。

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