hook SIGSEGV

Max Filippov jcmvbkbc at gmail.com
Wed May 14 18:15:42 EDT 2014


On Wed, May 14, 2014 at 4:14 PM, Kristof Provost <kristof at sigsegv.be> wrote:
> On 2014-05-10 21:46:01 (+0800), net.study.sea at gmail.com <net.study.sea at gmail.com> wrote:
>>      I want to know is it possible to hook SIGSEGV to restart the
>>      thread which the signal is sent to,without restart the whole
>>      process? And record the place where has caused this signal?
>>
> Yes, as others have already pointed out, you can hook SIGSEGV like any
> other signal.
>
> You're not going to be able to save the process any more, but you can
> still collect some useful information.
>
> I've found it very useful to have a SIGSEGV (and SIGPIPE, SIGABRT,
> SIGFPE, SIGILL) handler which logs a backtrace (look at 'man backtrace')
> to syslog. Very useful for debugging on targets where core dumps are
> impractical.
>
> Others have also pointed out that it might no longer be safe to call
> printf() or malloc() there. That's true, but usually it's OK, and if it
> turns out that it wasn't ... Well, you were crashing anyway.

Well, not anyway: you still should be able to take a longjmp out of the
signal handler to a safe place.

-- 
Thanks.
-- Max



More information about the Kernelnewbies mailing list