in reply to Re: How to create private signals? (or block interruption)
in thread How to create private signals? (or block interruption)

I'm using perl v5.8.5
Use the Config module to find out whether you have reliable signals:
use Config;
print "Hurrah!\n" if $Config{d_sigaction};

RESULT: Hurrah!

To determine whether your interrupted system calls will automatically restart, look at your system's C signal.h include file: % egrep 'SAV_(RESTART|INTERRUPT)' /usr/include/*/signal.h

RESULT:
/usr/include/asm/signal.h: * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
/usr/include/asm/signal.h: * SA_RESTART flag to get restarting signals (which were the default long ago)
/usr/include/asm/signal.h:#define SA_RESTART 0x10000000
/usr/include/asm/signal.h:#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */

Basically I do not know what to do. I've tried those examples that you gave me link to, but it still gives me the warning. However, when I used $SIG{INT} = 'IGNORE'; I managed to delay the interruption with 2 seconds.

UPDATE: I found out that if I'm running a single process/thread it works. It seems like the reasoning from crashing comes from the fact that I fork another process in the background. Do I have to put some handlers inside this fork aswell? Or is there any signal for "children" that I can use ?

  • Comment on Re^2: How to create private signals? (or block interruption)

Replies are listed 'Best First'.
Re^3: How to create private signals? (or block interruption)
by shmem (Chancellor) on Sep 03, 2008 at 15:22 UTC

    SIGCHLD is the signal the parent gets from the kernel when the child terminates. Other than that, there are no special "children signals."

    A forked child is an exact copy of the parent, until the child starts developing own ideas. Signal handlers should be the same in the child - if they are set up before forking, that is.

    I guess at this point I need to see a bit more of the code involved to make an educated guess.