【问题标题】:Why Coredump files is not generating here?为什么这里没有生成 Coredump 文件?
【发布时间】:2013-08-21 10:12:46
【问题描述】:

我在这里有一个情况,几天前我能够在我的目标板上看到核心哑文件,我通过在我的 /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,但也没有成功

我们哪里做错了??

【问题讨论】:

  • -9kill 命令是KILL 信号,将简单地终止进程而无需核心转储。
  • 另外,为什么要使用$$?它扩展为您正在运行的 shell 的 pid。
  • 如果你使用的是 bash,你应该阅读the manual,上面写着:“在所有情况下,Bash 都会忽略 SIGQUIT。”
  • Linux 内核可以在不支持core 的情况下进行配置。查看为您的 Linux 内核设置了 CONFIG_ELF_CORE。然后应用标准的用户空间信息。

标签: c shell linux-kernel arm coredump


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但这是个坏主意。一些奇怪的程序可能捕获 SIGSEGVSIGABRT 更传统,捕捉它的少数程序知道它的含义。
    【解决方案3】:

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

    ulimit -c unlimited
    

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-03-18
        • 1970-01-01
        • 2017-05-15
        • 2019-09-28
        • 1970-01-01
        • 2018-01-05
        • 2018-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多