c-为什么Coredump文件没有在这里生成



我在这里遇到了一种情况,几天前我在目标板上看到了一个核心转储文件,我通过添加"ulimit-c无限";到我的/etc/profile。

但后来有人告诉我,这只会对从登录外壳启动的程序产生影响,而不会对systemd等启动的进程/服务产生影响,ulimits设置在另一个位置。

所以我更改了/etc/limits文件并添加了ulimit -c unlimited行,但仍然看不到核心转储文件。

我正在运行kill -9 $$来生成分段故障,然后它将像以前一样生成核心转储文件。

我们尝试改变"/proc/sys/kernel/core_pattern";文件并显式运行ulimit -c unlimited,但这还不够。

我们哪里出了问题?

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

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

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

ulimit -c unlimited

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

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

但是,如果使用kill(1)命令(或底层的kill(2)系统调用,例如来自某个特定程序),我建议使用SIGABRT(中止(3)在解除锁定后发送给自己的信号),如信号(7)中所述。

请注意,程序通常可以禁止核心转储,例如,在RLIMIT_CORE设置为0的情况下调用setrlimit(2),或者处理或忽略一些信号(例如,sigaction(2)…)。

相关内容

  • 没有找到相关文章

最新更新