Заставить ядро сбросить с активной, нормально работающей программы на FreeBSD
Я пишу код обработки ошибок для сервера на FreeBSD. Для чрезвычайно серьезных ошибок я хочу избежать повреждения данных путем немедленного прекращения. Это легко, exit(3)
. Перед тем, как я выйду, я выводил свои соответствующие переменные, которые привели меня туда. Однако в идеале это прекращение будет сопровождаться .core
, чтобы я мог полностью исследовать, что привело меня к этому катастрофическому (и, вероятно, трудно воспроизвести) состоянию.
Как я могу заставить это произойти?
Ответы
Ответ 1
kill -QUIT process_id
приведет к созданию дампа ядра из работающего процесса (при условии, что ограничения ресурса позволяют это).
Или см. man 3 abort
, чтобы программа сама выгружалась.
Добавлен. Из интерактивной оболочки можно выполнить прогонную программу с отменой ключа quit, обычно Ctrl + \, который отправляет SIGQUIT так же, как и более общий Ctrl + C отправляет SIGINT. Это идентично kill -QUIT…
, это просто проще ввести, если вы находитесь на управляющем терминале. См. man 1 stty
, если клавиша останова по умолчанию отличается.
Ответ 2
Это помогло мне!
kill -11
всегда работает для меня. 11 - SIGSEGV (неверная ссылка на память)
Ответ 3
Вы также можете взглянуть на gcore (1) (http://man.freebsd.org/gcore).