Next: Signaling Another Process, Up: Generating Signals
A process can send itself a signal with the raise function. This
function is declared in signal.h.
The
raisefunction sends the signal signum to the calling process. It returns zero if successful and a nonzero value if it fails. About the only reason for failure would be if the value of signum is invalid.
The
gsignalfunction does the same thing asraise; it is provided only for compatibility with SVID.
One convenient use for raise is to reproduce the default behavior
of a signal that you have trapped. For instance, suppose a user of your
program types the SUSP character (usually C-z; see Special Characters) to send it an interactive stop signal
(SIGTSTP), and you want to clean up some internal data buffers
before stopping. You might set this up like this:
#include <signal.h>
/* When a stop signal arrives, set the action back to the default
and then resend the signal after doing cleanup actions. */
void
tstp_handler (int sig)
{
signal (SIGTSTP, SIG_DFL);
/* Do cleanup actions here. */
...
raise (SIGTSTP);
}
/* When the process is continued again, restore the signal handler. */
void
cont_handler (int sig)
{
signal (SIGCONT, cont_handler);
signal (SIGTSTP, tstp_handler);
}
/* Enable both handlers during program initialization. */
int
main (void)
{
signal (SIGCONT, cont_handler);
signal (SIGTSTP, tstp_handler);
...
}
Portability note: raise was invented by the ISO C
committee. Older systems may not support it, so using kill may
be more portable. See Signaling Another Process.