| [ CnUnix ] in KIDS 글 쓴 이(By): guest (geust) <218.145.174.30> 날 짜 (Date): 2003년 1월 6일 월요일 오전 10시 48분 49초 제 목(Title): [다시질문]리눅스에서의 signal 처리 리눅스에서 프로그래밍을 하는데 아래와 같이 시그널 처리 함수를 등록해 주었습니다.(ALRM 시그널이 오면 updatedb()함수 호출..) RETSIGTYPE (*setsignal (int sig, RETSIGTYPE (*func)(int)))(int) { struct sigaction old, new; memset(&new, 0, sizeof(new)); new.sa_handler = func; new.sa_flags |= SA_RESTART; if(sigaction(sig, &new, &old) < 0) return(SIG_ERR); return(old.sa_handler); } void initSignals(void) { setsignal(SIGCHLD, SIG_IGN); setsignal(SIGTERM, cleanup); setsignal(SIGINT, cleanup); setsignal(SIGHUP, updatedb); setsignal(SIGPIPE, ignoreThisSignal); setsignal(SIGABRT, ignoreThisSignal); setsignal(SIGALRM, updatedb); } 커널 2.4.5 gcc-2.96-85, glibc-2.2.4-31에서는 원하는 결과가 정상적으로 나오는데 커널 2.4.18-18.7.x, gcc-2.96-112, glibc-2.2.5-42에서는 SIGALRM 시그널을 받을 때 (# kill -SIGALRM processid) [2]+ Alarm clock ./myprogram 이라는 메시지를 출력하고 프로그램이 종료되어 버립니다. 첫번째 환경은 레드햇 7.1배포판에서 이것저것 많이 고친 것이고 두번째 환경은 레드햇 7.3에서 공식 패치를 한 것입니다. 문제가 뭘까요? |