为什么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但它也没有运行

我们在哪里做错了?

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

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

 ulimit -c unlimited 

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

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

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

但是如果使用kill(1)命令(或底层的kill(2)系统调用,例如来自某个ad-hoc程序),我建议使用SIGABRT (在解除阻塞之后中止(3)发送给自身的信号),如信号(7) 。

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