Имя файла дампа ядра усечено

Учитывая, что конфигурация в /proc/sys/kernel/core_pattern установлена ​​​​на /cores/core.%e.%p, дампы ядра именуются в соответствии с шаблоном, однако для процессов, запускающих исполняемые файлы с длинными именами, например. SampleCrashApplication, сгенерированный основной файл будет содержать усеченное имя исполняемого файла: /cores/core.SampleCrashAppl.9933

Чем это вызвано ? На странице man core говорится только о том, что максимальный размер результирующего имени файла ядра составляет 128 (64 для ядер до версии 2.6.19).


person CsTamas    schedule 09.11.2009    source источник


Ответы (1)


Код для этого можно найти в exec.c здесь.

Код будет копировать имя ядра на основе шаблона до первого процента (что дает /cores/core.). В процентах он будет увеличиваться и обрабатывать «е». Код для обработки части 'e' распечатывает шаблон с помощью snprintf на основе структуры current->comm.

Это имя исполняемого файла (исключая путь), ОБРЕЗАННОЕ до значения TASK_COMM_LEN. Поскольку это определяется как 16 символов (по крайней мере, в ядре, которое я нашел), то SampleCrashApplication усекается до 15 + 1 символов (1 для нулевого байта в конце), что объясняет, почему вы получаете усеченное имя дампа ядра.

Почему эта структура усекает имя TASK_COMM_LEN, это более глубокий вопрос, но это что-то внутреннее для ядра, и есть некоторые обсуждения здесь.

person Jeff Foster    schedule 10.11.2009