我在这里有一个情况,几天前我能够在我的目标板上看到核心愚蠢的文件,我通过在我的/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,但它也没有用完
我们做错了什么?
答案 0 :(得分:5)
kill -9
不会生成核心文件。命令kill -l
给出了支持信号的列表。 kill -6
或kill -SIGABRT
应生成核心文件。以及大多数其他信号,例如kill -BUS
,kill -SEGV
等。
答案 1 :(得分:2)
您必须首先启用用户限制设置,以确保可以创建核心文件。
ulimit -c unlimited
应用程序用户必须在同一会话中启动应用程序之前运行。此设置由应用程序继承,因此在启动应用程序之前设置的ulimit是应用程序的ulimit设置(除非启动脚本更改它)。
答案 2 :(得分:1)
kill -11总是对我有用。 11是SIGSEGV(无效的内存引用)
答案 3 :(得分:0)
除了其他答案之外,您还可以使用gcore(1)生成运行进程的核心转储。
但是如果使用kill(1)命令(或基础kill(2)系统调用,例如来自某个特别程序),我建议使用SIGABRT
(abort(3)发送的信号正如signal(7)中所述。
请注意,程序通常可以禁止核心转储,例如通过调用setrlimit(2)并将RLIMIT_CORE
设置为0或处理或忽略某些信号(例如sigaction(2) ...)。