signal 처리 중에..
글쓴이: wedwed / 작성시간: 금, 2004/04/23 - 1:36오후
signal을 처리하는 도중 의문이 생겼는데요....
signalhandler함수로 처리하게 될 경우에요..
시그널이 발생해서 그 handler함수 내에서 처리도중.
그 해당 시그널이 또 발생하게 된다면.
1. 새로운 시그널을 처리하게 되는지...
2. 새로운 시그널을 무시하고 기존 시그널을 계속 처리하는지...
3. 기존 것을 처리하고 또 새로운 시그널을 처리하게 되는지....
handler함수로 인수를 넘겨주지 못해 전역변수 선언해서 사용하는데...
좀 찝찝하네요.....
handler함수 내에서는 전역변수를 변경하지 않는 것이 좋을까요...
질문이 횡성수설하지만 이해하시고... 친절한.. 답변 부탁드립니다...
:oops:
Forums:
간단히 만들어서 테스트를 해 보시는게 어떨까요?[code:1]vo
간단히 만들어서 테스트를 해 보시는게 어떨까요?
또는...
대충 이런 식이면 대충 이해가 가지 않을까요?
어딘가에서 찾았습니다... 시그날 핸들러 함수가 실행되고 있을
어딘가에서 찾았습니다...
시그날 핸들러 함수가 실행되고 있을 때 도착한 다른 시그날이 있다면 무슨 일이 발생할까? 한 특
정한 시그날을 위한 핸들러가 호출되었을 때, 핸들러가 리턴할 때 까지 그 시그날은 보통 블록된다.
만일 같은 종류의 두 개의 시그날이 서로 가까운 시간에 도착한다면, 두 번째것은 첫 번째것이 처리
될때까지 그냥 보유하고 있을 것이다. ( 만일 당신이 이러한 형태의 더 많은 시그날이 도착하도록
허용하기를 원한다면, 핸들러는 sigprocmask를 사용해서 시그날을 명백하게 블록을 해제할 수 있다;
그렇지만, 당신의 핸들러는 다른 종류의 시그날의 배달에 의해서는 여전히 인터럽트되어질 수 있다.
이것을 피하기 위해서, 당신은 sigaction에 인수로써 사용하는 action 구조체의 sa_mask 멤버를 사용
해서 핸들러가 실행되는 동안 블록되어질 시그날을 명백하게 지정할 수 있다. 그들 시그날은 호출
된 핸들러를 위한 시그날에 더해져 있고, 다른 시그날들은 보통 프로세스에 의해서 블록되어진다.
21.7.5절 [Blocking for Handler] 301 페이지 참조.
댓글 달기