도와주세요!!
글 수 15,339
2004.06.09 14:27:40 (*.110.112.55)
6701
현지 아빠님이 고민하시는 부분은 시그널과 어떤 관계에 있는지
저는 잘 모르겠읍니다. ( 별로 관계없어 보이거든요 ^^ )
제가 이전에 시그널을 사용할때 생기는 문제라는 것은
시스템 콜과 관련된 호출 함수들이 강제 중지된다는 것입니다.
(이것을 막는 옵션이 있다는데 실제로 적용해 보니 안되더군요..
귀찮아서 가급적 시그널을 안쓰는 방향으로 돌렸죠 ^^ )
예를 들어 어떤 프로그램이 read 함수를 사용하여 파일을 읽는 중이거나
또는 네트워크 통신 프로그램에서 read 함수를 이용하여 읽기를 수행하는 경우
(물론 반대도 마찬가지지요 write 등 )
시그널이 발생하면 해당 함수가 종료되면서 에러를 반환합니다 .
이때는 파일 핸들과 관련된 에러가 아니기 때문에 재시도를 해 주어야 합니
다. 보통 이부분에 잘못된 처리가 버그를 발생시키더라구요
이 부분은 glibc 매뉴얼에 시그널과 관련된 부분을 꼭 살펴 보시기
바랍니다.
두번째는 시그널이 수행되는 시점은 일종의 인터럽트 와 같은 것인데
이 부분 역시 프로세서를 사용하기 때문에 동일한 스택을 사용한다는 점
입니다. 이때문에 스택이나 메모리 포인터의 잘못된 처리는 즉시
원래 수행중이던 부분에 영향을 미칠수 있읍니다.
저는 잘 모르겠읍니다. ( 별로 관계없어 보이거든요 ^^ )
제가 이전에 시그널을 사용할때 생기는 문제라는 것은
시스템 콜과 관련된 호출 함수들이 강제 중지된다는 것입니다.
(이것을 막는 옵션이 있다는데 실제로 적용해 보니 안되더군요..
귀찮아서 가급적 시그널을 안쓰는 방향으로 돌렸죠 ^^ )
예를 들어 어떤 프로그램이 read 함수를 사용하여 파일을 읽는 중이거나
또는 네트워크 통신 프로그램에서 read 함수를 이용하여 읽기를 수행하는 경우
(물론 반대도 마찬가지지요 write 등 )
시그널이 발생하면 해당 함수가 종료되면서 에러를 반환합니다 .
이때는 파일 핸들과 관련된 에러가 아니기 때문에 재시도를 해 주어야 합니
다. 보통 이부분에 잘못된 처리가 버그를 발생시키더라구요
이 부분은 glibc 매뉴얼에 시그널과 관련된 부분을 꼭 살펴 보시기
바랍니다.
두번째는 시그널이 수행되는 시점은 일종의 인터럽트 와 같은 것인데
이 부분 역시 프로세서를 사용하기 때문에 동일한 스택을 사용한다는 점
입니다. 이때문에 스택이나 메모리 포인터의 잘못된 처리는 즉시
원래 수행중이던 부분에 영향을 미칠수 있읍니다.