쓰레드 환경에서 signal
글쓴이: leilei / 작성시간: 수, 2004/05/12 - 11:26오전
쓰레드폴로 구성된 서버에 SIGCHLD와 SIGPIPE를 처리하기 위해
signal(SIGCHLD, SIG_IGN); signal(SIGPIPE, SIG_IGN); // 닫힌 소켓에 쓰려고 시도..
이렇게 되어 있습니다.
OS가 솔라리스이기 땜시 sigaction으로 바꿔 줄려고 하는데요..
SIGCHLD는 sa_mask = SA_NOCLDWAIT;
이렇게 해 주면 될것 같은데..
SIGPIPE는 어떻게 해 줘야 SIG_IGN이 되는지 궁금합니다..
Forums:
[code:1] signal(SIGCHLD, SIG_IG
이코드가 솔라리스에서 먹지 않는다는건가요?
조금 질문이 애매해서..
이부분이 조금 해깔리게 하네요..
솔라시스에서 작업한지좀 되서.. 가물거리는건지 몰라도..
솔라리스에서 위코드가 먹히는걸로 알고있습니다만..
sigaction을 쓰시려는 질문의 의도랑 틀린 이야기라면 죄송합니다..
' 형식이 내용을 규정한다. '
한참 지나서 답글을 다네요.. 처음에 글 올리고 다들 무관심이셔서 저
한참 지나서 답글을 다네요..
처음에 글 올리고 다들 무관심이셔서 저도 관심 끊었던 이야기라.. :cry:
제 질문은 linux와 다르게 한번 signal이 발생되어서 핸들러 처리가 되어지면
핸들러 등록이 풀리기(?) 때문에 드린 질문이었습니다.
그러니까.. 처음 한번만 핸들러가 실행되겠죠..
모 핸들러 속에 다시 등록을 하는게 올바른 방법인지 꽁수인지는
모르겠지만.. 당장 급하게 이런 방법으로 사용하고는 있습니다.. :oops:
sigaction이 아니라 signal이 그렇다는 말씀이시지요?s
sigaction이 아니라 signal이 그렇다는 말씀이시지요?
signal 함수와 같은 초기 System V 계열의 signal 구현은,
signal 이 발생한 경우, signal handler를 default로 초기화 합니다.
signal 함수를 계속 사용하고 싶으시다면,
말씀하신대로 handler를 매번 새로 등록해주면 됩니다.
I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?
[code:1]sigset(SIGCHLD, SIG_IGN
하시면 됩니다.
>/dev/null 2>&1
댓글 달기