CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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에서 공식 패치를 한 것입니다.

문제가 뭘까요?


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.