티스토리 뷰

프로젝트

os-2개인과제

호릭 2008. 11. 5. 10:37

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/Signal/SignalHow?action=print


void value not ignored as it ought to be
이 에러는 반환 값이 void인데 반환 값을 요구할 때 나는 에러임.



sigaction() 시스템 호출은 특정 시그널의 수신에 대해서 취할 액션을 설정하거나 변경하기 위해서 사용된다.


헤더파일 : #include<signal.h>
int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);
argument
- signo : 행동을 지정할 개개의 시그널
- *act : 지정하고 싶은 행동
- *oact : 나중에 복구를 위해 현재 값을 저장한다.

 


SIGINT 터미널에서 인터럽트 키 중의 하나인 Ctrl-C 를 눌렀을 때 발생하며, 프로세스는 종료됩니다. 


시그널에도 여러종류가 있다
사회생활의 작업중 발생하는 상황이 여러가지가 있듯이, 컴퓨터 시스템 상에서 발생할수 있는 상황도 여러가지가 있다. 이는 OS에 따라 다르게 설정된다. OS에서 어떠한 시그널을 지원하는 지는 kill 명령을 이용해서 알아볼수 있다. 아래는 필자의 리눅스 박스로써 kernel 2.4.3 에서 지원하는 시그널을 캡쳐한 화면이다. [root@localhost root]# kill -l 
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     17) SIGCHLD
18) SIGCONT     19) SIGSTOP     20) SIGTSTP     21) SIGTTIN
22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO
30) SIGPWR      31) SIGSYS      32) SIGRTMIN    33) SIGRTMIN+1
34) SIGRTMIN+2  35) SIGRTMIN+3  36) SIGRTMIN+4  37) SIGRTMIN+5
38) SIGRTMIN+6  39) SIGRTMIN+7  40) SIGRTMIN+8  41) SIGRTMIN+9
42) SIGRTMIN+10 43) SIGRTMIN+11 44) SIGRTMIN+12 45) SIGRTMIN+13
46) SIGRTMIN+14 47) SIGRTMIN+15 48) SIGRTMAX-15 49) SIGRTMAX-14
50) SIGRTMAX-13 51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10
54) SIGRTMAX-9  55) SIGRTMAX-8  56) SIGRTMAX-7  57) SIGRTMAX-6
58) SIGRTMAX-5  59) SIGRTMAX-4  60) SIGRTMAX-3  61) SIGRTMAX-2
62) SIGRTMAX-1  63) SIGRTMAX

<alarm>
alarm(5)라고 하면 5초 후에 프로세스에 SIGALRM을 전달한다. 만일 alarm이 여러개 쓰인다면 기본에 설정되었던 alarm값은 취소되고 가장 최근의 설정값으로 지정된다.

alarm(0)하면 alarm 해제

SIGALRM 의 기본 행동은 프로세스 종료이다.



<sigaction>
examine and change a signal action 
#include <signal.h>

int sigaction(int signum, const struct sigaction *act, struct sigaction*oldact);

sigaction은 시스템 콜의 시그널을 받은 프로세스에 의해서 행동을 바꾼다.
signum은 SIGKILL과 SIGSTOP을 제외한 것에서는 모든 것이 가능하다
만일 act가 null이 아니면 signum에 의한 행동은 act로 변경된다.
만일 oldact가 null이 아니면 예전 행동들은 oldact에 저장이 된다.

sigaction의 구조는 다음과 같다.
struct sigaction{
         void (*sa_handler)(int);
         void (*sa_sigaction)(int, siginfo_t *, void *);
         sigset_t sa_mask;
         int sa_flags;
         void (*sa_restorer)(void);
}

sa restorer은 사용하지 말아야할 것으로 POSIX에서 구체화하지 않았다.
sa handler는

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함