시그널 처리에 대해서 궁금증...
글쓴이: 익명 사용자 / 작성시간: 화, 2002/11/12 - 12:39오후
궁금한게 있는데요.
signal(SIGUSR1, handler);
이렇게 해주고
나중에 쉘에서 이 프로그램의 프로세스ID(8123)로 시그널을
보낼 때
#kill -USR1 8123
이렇게 해주어야 하던데...
signal()함수에서 첫번째 인자인 SIGUSR1이 사용자 시그널인데
#kill -SIGUSR1 8123 으로 해주면 알 수 없는 시그널이라고
나옵니다. 앞에 SIG라는 접두어는 쓸 필요가 없는건가요?
그렇다면 왜 이렇게 되는건지 궁금합니다.
Forums:
Re: 시그널 처리에 대해서 궁금증...
그거야 쉘의 kill 루틴이나 kill 프로그램을 그렇게 만들었으니까 그런거
죠. ^^
signal(SIGUSR1, pid);
의 SIGUSR1 은 signal.h 에 정의되어 있는 상수이고,
명령행에서 입력한 'kill -USR1 pid' 에서 USR1 은 루틴에서 파싱해서
실제로 int 값으로 바꿔줘야 하는 문자열이죠.
그러니까 이 문자열을 숫자형태로 받을지, 문자열로 받을지 또는
둘 다 지원할지는 전적으로 프로그램의 자유겠죠.
그러나 일반적으로 다른 사람들이 많이 쓰는 형식으로 쓰는 것이
좋으니 실제 시그널번호를 나타내는 숫자와 signal.h 에 정의되어
있는 상수값 중 SIG를 뗀 뒷 부분을 쓰기로 결정을 한 것이겠고요.
아마 구현에 보면
...
else if (!strcasecmp(option_str, "USR1")) {
sig_no = SIGUSR1;
} else if (!strcasecmp(option_str, "USR2")) {
sig_no = SIGUSR2;
}
...
kill(pid, sig_no);
와 같은 코드가 있지 않을까요? ^^
감사합니다. *^^*
이해가 팍!팍! 가네용~~!
댓글 달기