Принудительно выгружать ядро ​​из активной нормально работающей программы на FreeBSD - PullRequest
27 голосов
/ 03 июля 2011

Я пишу код обработки ошибок для сервера во FreeBSD.Для очень серьезных ошибок я хочу избежать повреждения данных путем немедленного прекращения.Это просто, exit(3).Перед выходом я вывожу соответствующие переменные, которые привели меня туда.Однако в идеале это завершение должно сопровождаться .core, чтобы я мог полностью исследовать, что привело меня к этому катастрофическому (и, вероятно, трудно воспроизводимому) состоянию.

Как я могу заставить это произойти?

Ответы [ 4 ]

36 голосов
/ 03 июля 2011

kill -QUIT process_id вызовет дамп основной памяти из запущенного процесса (при условии, что ограничения ресурса позволяют это).

Или см. man 3 abort, чтобы заставить программу выгружать себя.

Добавлено : из интерактивной оболочки можно выполнить работающую программу, чтобы прервать ее с помощью клавиши quit, обычно Ctrl + \ , которая отправляет сигнал SIGQUIT так же, как болееобщие Ctrl + C отправляет SIGINT.Это идентично kill -QUIT…, просто набрать его, если вы находитесь на управляющем терминале.См. man 1 stty, если ваш ключ выхода по умолчанию отличается.

3 голосов
/ 13 июня 2017

Это помогло мне! kill -11 всегда работает для меня. 11 - SIGSEGV (недопустимая ссылка на память)

2 голосов
/ 14 июня 2017

Вы также можете взглянуть на gcore (1) (http://man.freebsd.org/gcore).

1 голос
/ 17 июля 2018

На sles12 .. У меня ниже работал код:

kill -11

Предыдущие предложения ничего не делали.

...