리눅스 signal 처리루틴이 변경 되었나요??
글쓴이: goatee98 / 작성시간: 월, 2005/04/25 - 11:56오전
예전 리눅스에서는 signal 함수에서 등록해 놓은 처리 루틴을 한번 타고 난뒤 디폴트 루틴으로 변경되는 문제가 있어서 siganl 대신 sigaction을 사용하라는 권고 사항이 있었는것 같은데 레드햇리눅스9에서 테스트 해보니까 SIGINT가 Term하지 않네요..
./signaltest
0 SIGINT
1 SIGINT
2 SIGINT
3 SIGINT
4 SIGINT
...
1 SIGINT을 찍으면 안된다고 생각을 했는데 그게 아니네요..
signal 수가 문제가 없는건가요??
사용한예제소스입니다.
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> int signal_count; void sigHandler(int signum) { if(signum == SIGINT) { printf("%d SIGINT\n", signal_count++); } else { printf("else signal\n"); } } int main(int argc, char **argv) { signal_count = 0; signal(SIGINT, &sigHandler); while(1) { sleep(1); } }
Forums:
확실히 맨페이지를 보면 signal 함수로 시그널 핸들러를 등록하면 한번
확실히 맨페이지를 보면 signal 함수로 시그널 핸들러를 등록하면 한번 수행하고 리셋된다는 경고가 있습니다. 그치만 그건 리눅스가 그러하다는 것이 아니고 다른 유닉스중에 그렇게 동작하는 것이 있다는 얘기입니다.
glibc2는 그렇지 않다고 하니 마음 놓으셔도 되겠습니다. 혹시 svr5계열의 유닉스를 사용하게 되거나, 그쪽 유닉스까지 portable한 프로그램을 짜려 한다면 고민해볼 문제 같습니다.
댓글 달기