dan@haddock.UUCP (08/14/84)
> What you should do is check to see if SIGINT was already being ignored > when you try to handle it. (This indicates that you're in the background.) > If it was being ignored, reset it to that state. > > if (signal(SIGINT, clean_routine) == SIG_IGN) > signal(SIGINT, SIG_IGN); Right description, wrong code. You've left a hole; if the signal arrives after the first signal() call and before the second, it will get caught even though it was ignored initially. The correct code is if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, clean_routine); This is explained in Brian Kernighan's document on UNIX programming that comes with many (all?) UNIX systems.