Как предотвратить linux, чтобы убить мой процесс и генерировать файл ядра вместо
Я тестирую приложение, когда приложение использует большую часть доступной памяти, ядро убивает мой процесс. Но я хочу, чтобы процесс умирал и генерировался основной файл для расследования. Я использую redhat 5.4
Есть ли способ сделать это?
3 ответа
Из вашего описания "большая часть доступной памяти" я предполагаю, что вашей системе не хватает памяти, а обработчик нехватки памяти ядра убивает ваш процесс. Это убивает SIGTERM, поэтому вы не получите дамп ядра при нормальных обстоятельствах.
Вы можете получить дамп ядра, обработав SIGTERM в вашей программе и отправив вашему процессу SIGSEGV в обработчик сигнала, тем самым запустив дамп ядра. OTOH, в ситуации нехватки памяти, это может привести к смерти ряда дополнительных процессов, которые также уничтожаются обработчиком OOM.
Вы должны найти, какой сигнал получит ваша программа, когда произойдет OOM. Затем используйте функцию сигнала, чтобы установить обработчик
Действие по умолчанию для многих сигналов - дамп ядра. Если программа не переопределяет обработчики сигналов по умолчанию в Linux, вы можете вызвать дамп ядра с помощью SIGQUIT, если ulimit
установлено.
SIGQUIT можно отправить с kill -SIGQUIT (process_id)
или, если программа связана с клавиатурой, набрав Ctrl-\