3

/proc/sys/kernel/core_pattern给定set to中的配置/cores/core.%e.%p,核心转储根据模式命名,但是对于运行具有长名称的可执行文件的进程,例如SampleCrashApplication,生成的核心文件将包含截断的可执行文件名称:/cores/core.SampleCrashAppl.9933

这是什么原因造成的?该man core页面仅讨论生成的核心文件名的最大大小为 128(2.6.19 之前的内核为 64)

4

1 回答 1

3

可以在此处的 exec.c 中找到此代码。

代码将根据模式复制核心名称,直到第一个百分比(给出 /cores/core.)。在百分比它将增加和处理'e'。处理“e”部分的代码使用基于 current->comm 结构的 snprintf 打印出模式。

这是可执行文件名称(不包括路径)截断为值TASK_COMM_LEN。由于这被定义为 16 个字符(至少在我找到的内核中),因此 SampleCrashApplication 被截断为 15 + 1 个字符(最后的空字节为 1),这解释了为什么你得到截断的核心转储名称。

至于为什么这个结构会截断名称 TASK_COMM_LEN,这是一个更深层次的问题,但它是内核内部的东西,这里有一些讨论。

于 2009-11-10T07:22:54.270 回答