Replace the signal mask, and then suspend the process
#include <signal.h> int sigsuspend( const sigset_t *sigmask );
libc
The sigsuspend() function replaces the process's signal mask with the set of signals pointed to by sigmask and then suspends the process until delivery of a signal whose action is either to execute a signal-catching function (then return), or to terminate the process.
A value of -1 is returned (if the function returns), and errno is set.
/*
* This program pauses until a signal other than
* a SIGINT occurs. In this case a SIGALRM.
*/
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
sigset_t set;
int main( void )
{
sigemptyset( &set );
sigaddset( &set, SIGINT );
printf( "Program suspended and immune to breaks.\n" );
printf( "A SIGALRM will terminate the program"
" in 10 seconds.\n" );
alarm( 10 );
sigsuspend( &set );
return( EXIT_SUCCESS );
}
| Safety: | |
|---|---|
| Cancellation point | Yes |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
errno, pause(), sigaction(), sigpending(), sigprocmask()