signal example
#include <stdio.h> #include <signal.h> void main() { sigset_t _set; sigemptyset(&_set); sigaddset(&_set, SIGINT); sigaddset(&_set, SIGQUIT); if (sigismember(&_set, SIGINT) == 1) { printf("_set has signal SIGINT\n"); } else { printf("has no signal\n"); } if (sigismember(&_set, SIGQUIT) == 1) { printf("_set has signal SIGQUIT\n"); } else { printf("has no signal\n"); } sigdelset(&_set, SIGQUIT); if (sigismember(&_set, SIGQUIT) == 1) { printf("_set has signal SIGQUIT\n"); } else { printf("has no signal\n"); } }
muhe221@muhe:~/test$ gcc -o sigset sigset.c
muhe221@muhe:~/test$ ./sigset
_set has signal SIGINT
_set has signal SIGQUIT
has no signal
------------------------------------------------------------------------------------------------
sleep(int)会被信号打断,它返回剩余时间
#include <stdio.h> #include <signal.h> void handler(int signumber) { printf("\nreceive a signal: %d\n", signumber); } void main() {
struct sigaction act;
memset(&act, 0, sizeof(act));
sigemptyset(&act.sa_mask); act.sa_handler = &handler; sigaction(SIGINT, &act, NULL); int left = 100; printf("begin to while()\n"); while (left > 0) { printf("begin to sleep(%d)\n", left); left = sleep(left); printf("sleep() finish\n"); } }
begin to while()
begin to sleep(100)
^C
receive a signal: 2
sleep() finish
begin to sleep(96)
^C
receive a signal: 2
sleep() finish
begin to sleep(89)
------------------------------------------------------------------------------

浙公网安备 33010602011771号