in reply to Re^2: Signal Handler
in thread Signal Handler

Sorry, forgot to mention explicitly that this only works starting with Perl 5.10.0 — AFAIK, older versions only ever provide the signal name (I get the same output as you with 5.8.8).

Update: FWIW, this is the respective code snippet from mg.c (line 2854) in the Perl 5.10.0 sources:

#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) { struct sigaction oact; if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) +{ if (sip) { HV *sih = newHV(); SV *rv = newRV_noinc((SV*)sih); /* The siginfo fields signo, code, errno, pid, uid, * addr, status, and band are defined by POSIX/SUSv3. */ (void)hv_stores(sih, "signo", newSViv(sip->si_signo)); (void)hv_stores(sih, "code", newSViv(sip->si_code)); #if 0 /* XXX TODO: Configure scan for the existence of these, but even + that does not help if the SA_SIGINFO is not implemented according to + the spec. */ hv_stores(sih, "errno", newSViv(sip->si_errno)); hv_stores(sih, "status", newSViv(sip->si_status)); hv_stores(sih, "uid", newSViv(sip->si_uid)); hv_stores(sih, "pid", newSViv(sip->si_pid)); hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr))) +; hv_stores(sih, "band", newSViv(sip->si_band)); #endif EXTEND(SP, 2); PUSHs((SV*)rv); PUSHs(newSVpvn((char *)sip, sizeof(*sip))); } } } #endif

I can't find any entry in the Changes file when this has been added, but it's definitely not there in 5.8.8.   (Note the "#if 0 /* XXX TODO:...", btw, which wraps the "pid" code.)

Replies are listed 'Best First'.
Re^4: Signal Handler
by lakshmananindia (Chaplain) on Dec 08, 2008 at 10:31 UTC
    Hi almut,

    Thanks, now I got it. You also gave me an insight on XS. Thanks.