Written signal handler function register signals and define behavior signals.
This example use two signals, SIGINT and SIGTSTP.
Program compiling.
$ gcc signal.c -o signal
Program running.
$ ./signal
I'm working...
^CCatch SIGNAL[2] <-- Ctrl + c key in.
Work harder! <-- Signal handler message. Don’t stop.
I'm working...
I'm working...
^ZCatch SIGNAL[20] <-- Ctrl + z key in.
We have a break. <-- Signal handler message. It’s goiung stop.
I've had enough!
$
signal.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
static void signalHandler(int sig) ;
static int doit;
int main(int argc, char** argv) {
struct sigaction act;
act.sa_handler = &signalHandler;
act.sa_flags = 0;
sigfillset(&act.sa_mask);
if (sigaction(SIGINT, &act, NULL)<0) {
perror("SIGINT sigaction()");
exit(-1);
}
if (sigaction(SIGTSTP, &act, NULL)<0) {
perror("SIGTSTP sigaction()");
exit(-1);
}
doit = 1;
while(doit) {
printf("I'm working...\n");
sleep(1);
}
printf("I've had enough!\n");
return(0);
}
static void signalHandler(int sig) {
printf("Catch SIGNAL[%d]\n", sig);
switch(sig) {
case SIGINT:
printf("Work harder!\n");
break;
case SIGTSTP:
printf("We have a break.\n");
doit = 0; // Quit process working
break;
default:
printf("I don't know.\n");
}
}
No comments:
Post a Comment