Файл дампа ядра не генерируется - PullRequest
52 голосов
/ 12 октября 2011

Каждый раз при сбое моего приложения файл дампа ядра не генерируется.Я помню, что несколько дней назад на другом сервере он генерировал .Я запускаю приложение, используя экран в bash, вот так:

#!/bin/bash
ulimit -c unlimited
while true; do ./server; done

Как вы можете видеть, я использую ulimit -c unlimited, что важно, если я хочу сгенерировать дамп ядра, но он все еще не 'не генерировать его, когда я получил ошибку сегментации.Как я могу заставить это работать?

Ответы [ 13 ]

0 голосов
/ 25 апреля 2018

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

0 голосов
/ 05 мая 2016

Примечание. Если вы сами написали какой-либо обработчик сбоя, ядро ​​может не сгенерироваться.Так что ищите код с чем-то в строке:

signal(SIGSEGV, <handler> );

, чтобы SIGSEGV был обработан обработчиком, и вы не получите дамп ядра.

0 голосов
/ 21 ноября 2015

Хотя это не будет проблемой для человека, который задал вопрос, потому что он запустил программу, которая должна была создать основной файл в сценарии с помощью команды ulimit, я хотел бы документально подтвердить, что ulimit Команда относится к оболочке, в которой вы ее запускаете (например, переменные окружения). Я потратил слишком много времени на запуск ulimit, sysctl и прочего в одной оболочке, а также на команду, которую хотел сбросить ядро ​​в другой оболочке, и удивился, почему файл ядра не был создан.

Я буду добавлять его в мой bashrc. Sysctl работает для всех процессов после его запуска, но ulimit работает только для оболочки, в которой он выпущен (возможно, также для потомков), но не для других оболочек, которые работают.

...