signal() 은 원래 System V 쪽에서 만들어졌습니다. 이넘은 코딩하기는 편하지만 한번 handler에서 처리가 끝나고 나면 다시 kernel의 시그널 셋이 off 된다는 단점이 있었습니다.
예전의 AP 개발자들은 이 문제를 해결하기 위해 handler에 진입하면 다시 signal()을 등록하여 문제를 해결하기도 했다고 합니다.
나중에 BSD계열에서 새로 구현된 signal()은 이러한 문제가 없습니다. 또 System V 계열의 유닉스 중 일부도 실제 구현에서는 이 문제를 해결하기도 하였고, HP-UX와 같은 일부 UNIX에서는 구 버전의 signal()을 그냥 두고 새로이 BSD signal과 동일한 기능을 하는 sigset()이라는 call을 만들기도 했다는 군요...
많이 사용되기는 하지만 signal()은 업계표준은 아닙니다. 기왕이면 POSIX 표준인 sigaction을 사용하심이...
대충 알아냈는데...
signal함수 써서 하는건 알겠거든요??
근데 제가 여기 게시판에서 본 글에 따르면 signal함수는 한번 수행되면
다시 원래되로 상태를 되돌려 놓는다고 했는데 실제로 해보니까 여러번
CTRL+C키를 눌러도 제가 정의한 기능대로 동작하는데 원래 이게 맞는건가요?
아 그리고 sigaction은 이상하게도 자꾸 ctrl+C키를 누르면 mode:0이란메세지가 뜨면서 기능이 동작하는데 왜 이런거죠?
...
리눅스에서는 signal 핸들링을 해놓으면 한번만 실행되고 default 상태로 돌아가는것이 아니라 계속해서 수행됩니다.
sun solaris같은 unix들은 한번만 수행되고 default 상태로 돌아 갑니다.
signal() 은 원래 System V 쪽에서 만들어졌습니다. 이넘은
signal() 은 원래 System V 쪽에서 만들어졌습니다. 이넘은 코딩하기는 편하지만 한번 handler에서 처리가 끝나고 나면 다시 kernel의 시그널 셋이 off 된다는 단점이 있었습니다.
예전의 AP 개발자들은 이 문제를 해결하기 위해 handler에 진입하면 다시 signal()을 등록하여 문제를 해결하기도 했다고 합니다.
나중에 BSD계열에서 새로 구현된 signal()은 이러한 문제가 없습니다. 또 System V 계열의 유닉스 중 일부도 실제 구현에서는 이 문제를 해결하기도 하였고, HP-UX와 같은 일부 UNIX에서는 구 버전의 signal()을 그냥 두고 새로이 BSD signal과 동일한 기능을 하는 sigset()이라는 call을 만들기도 했다는 군요...
많이 사용되기는 하지만 signal()은 업계표준은 아닙니다. 기왕이면 POSIX 표준인 sigaction을 사용하심이...
댓글 달기