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)
------------------------------------------------------------------------------

 

posted @ 2015-09-28 11:06  牧 天  阅读(208)  评论(0)    收藏  举报