[질문] Signal Handle(sigaction)의 Signal 처리 범위...??
글쓴이: splendor / 작성시간: 월, 2006/10/30 - 2:03오전
Signal Handling에 관련해서 문의드립니다.
이부분에 대해서는 왕초보인지라...ㅡㅡ;;
sigaction(....) 이렇게 처리하는 부분들이 전체 시스템내에 여러군데에 있으면 어떻게 처리가 되는지요?
예를 들어서
시스템 전체에는 A 모듈, B 모듈, C 모듈이 있는데.....
각 모듈은 별도의 process들로 동시에 돌고있고, process내에서 pthread들을 여러개 생성하기도 합니다.
가령 C모듈 코드 안에 sigaction을 정의했다면 그것은 C모듈 실행시 발생한 Signal에 대해서 처리하는 것인지요?
아니면 다른 A모듈, B 모듈들에서 발생한 Signal도 C모듈의 sigaction에서 잡힐 수가 있는 것인지요?
sigaction을 통해서 Signal Handler를 설정한 경우 Signal을 잡는 범위가 어디까지 인지 궁금합니다.
가령 어떤 Process가 있고, 거기서 SignalHandler를 달면 그 Process에서 생성한 모든 pthread들의 signal에 대해서 잡는다던지...
제가 Signal Handling쪽은 왕초보라 개념이 좀 없습니다. ㅡㅡ;;
고수들의 한수 가르침 부탁드립니다.
Forums:
프로세스는 자신한테
프로세스는 자신한테 오는 시그널만 잡습니다. 자식프로세스가 죽었을때 받는 SIGCHLD나 끊어진 소켓에 데이터를 쓸때 발생하는 SIGPIPE 등과 같이 시스템이 해당 프로세스에게 시그널을 보내거나, 프로세스 A가 서로간의 동기화 등을 위해 프로세스 B에게 시그널을 보내거나 또는 유저가 특정 동작을 지시하기위해 프로세스에게 SIGHUP 신호를 보내는것과 같이 프로세스는 자신에게 오는 시그널만 잡아서 처리를 합니다. A 프로세스가 B 프로세스에게 가는 시그널을 잡아서 처리할수는 없습니다.
그리고 프로세스에서 생성되는 쓰레드는 해당 프로세스의 시그널 설정을 상속받는것으로 알고 있습니다. 단, 여기서 주의할점이 쓰레드는 프로세스와는 달리 하나의 프로세스에서 생성된 다수의 쓰레드는 해당 프로세스에게 전송된 시그널을 모두 받습니다. 그래서 멀티쓰레드 프로그램에서 서로간의 동기화를 위해 유닉스 시그널을 사용하는것은 적절하지 못하다고 들었습니다.
쓰레드 책을 본지 오래되서 기억이 가물가물합니다. 혹시 틀린점이 있으면 다른 고수분들이 지적해 주실겁니다. ^^
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
어떤 쓰레드가 signal에 반응할지는 os별 vesrion별 상이
한 프로세스에서 생성된 쓰레드가 있고.. 이 프로세스에 signal을 보내면 main thread와 sub thread 어느쪽에서 signal에 반응할지는 시스템 및 OS별로 상이합니다.
즉.
main thread와 sub thread가 둘다 read 대기중일때.. 프로세스 외부에서 signal을 전송(kill)한다면.. 어느 Thread가 ERINTR(signal interrupt)에러를 받고 리턴할까요?
답은 제목과 같습니다.
댓글 달기