2012. 7. 13. 16:30
#include <stdio.h> #include <signal.h> #include <unistd.h> main() { sigset_t set1, set2; /* 꽉 찬 시그널 집합 set1 생성 */ sigfillset(&set1); sigemptyset(&set2); /* SIGINT를 원소로 하는 시그널 집합 set2 */ sigaddset(&set2, SIGINT); /* 모든 시그널에 블록 설정 */ sigprocmask(SIG_BLOCK, &set1, NULL); printf("block start\n"); sleep(10); /* SIGINT 시그널은 블록에서 해제 */ sigprocmask(SIG_UNBLOCK, &set2, NULL); printf("SIGINT unblock\n"); while(1) { printf("Hello World\n"); sleep(2); } } [localhost@local]#a.out block start ^\ --> 블록화됨 sigint wake up ^\ --> 블록화됨 Hello World ^c --> 프로세스 종료됨 [localhost@local]#a.out block start ^c --> 블록화되었다가 해제되면 프로세스 종료됨 ------------------------------------------------------------------------------------------------------- 시그널을 블록화했다가 원상태로 되돌리는 예제 #include <stdio.h> #include <signal.h> #include <unistd.h> main() { sigset_t set, oldset; sigemptyset(&set); sigaddset(&set, SIGINT); /* SIGINT에 대해 블록 설정하고 이전 블록화 된 시그널 집합을 oldset에 저장 */ sigprocmask(SIG_BLOCK, &set, &oldset); printf("block start\n"); sleep(10); /* oldset의 시그널들이 블록화 된 시그널 집합으로 교체 */ sigprocmask(SIG_SETMASK, &oldset, NULL); printf("restore to the original state\n"); while(1) { printf("Hello World\n"); sleep(2); } } |
'EMBEDDED > SYSTEM Proc' 카테고리의 다른 글
[Network] fcntl(), lockf() 예제 (0) | 2012.07.13 |
---|---|
[Signal] sigpending(),sigsuspend() 예제 (0) | 2012.07.13 |
[Signal] raise(), alarm()관련 예제 (0) | 2012.07.13 |
[Signal] pause() 함수 예제 (0) | 2012.07.13 |
[Signal] kill() 관련예제 (0) | 2012.07.13 |