Chcę móc wygenerować zrzut rdzenia, ale nie można zakończyć procesu. Nie potrzebuję go, by kontynuować egzekucję, po prostu nie umierać. To jest proces Ubuntu w C++.Czy można zrzucić rdzeń, ale nie można zakończyć procesu?
Wierzę, że wyrzucam rdzeń w dość standardowy sposób: łapię sygnał zakłócający poprzez ustawienie obsługi sygnału z sygnałem(), ustawiam limit rozmiaru rdzenia poprzez setrlimit(), a następnie podpowiadam zrzut rdzenia z sygnałem() i podbiciem():
signal(SIGSEGV, OnPosixSignal);
...
void OnPosixSignal(int iSignal)
{
struct rlimit CoreLimit;
CoreLimit.rlim_cur = RLIM_INFINITY;
CoreLimit.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &CoreLimit);
signal(iSignal, SIG_DFL);
raise(iSignal);
}
Czy jest coś, co mogę zrobić, aby nie zakończyć procesu po wyrzuceniu rdzenia?
Dziękuję z góry!
Czy spojrzałeś na to, jak "gcore" to robi? –
Nie znalazłem 'setrlimit()' na liście funkcji asynchronicznych. Czy na pewno dobrze jest wywołać to w programie obsługi sygnału? – EOF
Biblioteka 'coredumper' będzie twoim przyjacielem. –