다음 위로 이전 목차 리눅스 프로그래머를 위한 가이드

10.2 신호 다루기 (Signal Handling)

수년간에 걸쳐, 신호(signal)에 대한 정의와 의미(semantics)는 유닉스의 다른 구현들에 의해 다양한 방법으로 수정되어왔다. 오늘날, sysmbols에는 두가지 주요 부류(classes)가 있다.: 신뢰할 수 없는 것(unreliable)신뢰할 수 있는 것(reliable)이다. 신뢰할 수 없는(unreliable) 신호들은(signals) 신호 취급자(signal handler)가 한번 호출되어 인스돌된 것이 남아있지 않는 것이다. 이러한 "one-shot" 신호들은 프로그램이 신호 취급자가 인스톨된 채로 남아있기를 원한다면 신호 취급자(signal handler) 자체안에 신호 취급자를 재인스톨(re-install) 해야만 한다. 이때문에 취급자(handler)가 재인스톨(re-install)되기 전에 신호가 다시 도착할 수 있는 경쟁 상태가 생기게 되고 방아쇠가 당겨진(프로세스를 죽이는 것과 같은) 신호의 원래 동작에 의해 신호를 잃어버릴 수 있다. 그러므로, 이러한 신호들은 신호 잡기(signal catching)와 취급자 재인스톨 동작들(handler re-installation operations)은 nonatomic하기 때문에 신뢰할 수가 없다(unreliable).

신뢰할 수 없는(unreliable) 신호 sematics 하에서, 시스템 호출들은 신호에 의해 인터럽트(interrupted) 되었을 때 자동적으로 재시작되지 않는다. 그러므로, 프로그램이 모든 경우에 대해 평가하기 위해, 프로그램은 모든 시스템 호출을 한 후에 errno의 값을 확인할 필요가 있고 그값이 EINTR이면 시스템 호출을 다시 한다.

비슷한 내용으로, 신뢰할 수 없는(unreliable) 신호 sematics는 atomic 정지 동작을 얻기위한 쉬운 방법을 제공하지 않는다.(신호가 도착할 때까지 프로세스를 sleep상태로 만드는 것) 신호(signal) 취급자(handler) 재인스톨(reinstalling)의 신뢰할 수 없는(unreliable) 본질(nature) 때문에 프로그램이 인식하지 못한 채 신호가 도착하는 경우가 있다.

신뢰할 수 있는(reliable) 신호 sematics 하에서, 반면에, 신호(signal) 취급자(handler)는 호출될 때 인스톨된 채 남겨지고, 재인스톨(reinstallation)을 위한 경쟁 상태는 피할 수 있다. 또한, 어떤 시스템 호출들은 재시작될 수 있고, atomic 정지(pause) 동작은 POSIX sigsuspend 함수를 경유하여 사용될 수 있다.



이전:10.1 소개 (Introduction) 다음:10.2.1 SVR4,BSD,POSIX.1에서의 신호들

Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved

Email To:Webmaster , Another address
LAST UPDATE Dec 19,1997
Created Dec 19,1997