다양한 신호에 대한 기본 핸들러를 살펴보세요.

다양한 신호에 대한 기본 핸들러를 살펴보세요.

SIGKILL 등과 같은 각 신호에 대한 기능인 기본 신호 처리기가 있다는 것을 알고 있습니다. 어느 파일에 기록되어 있나요? signal.h를 보려고 했지만 찾을 수 없습니다.

나는 각 신호 핸들러가 적어도 하나의 함수(핸들러)를 갖기를 원합니다.

이 파일을 찾도록 도와주세요.

답변1

커널 코드를 읽고 싶지 않다면 보고 싶은 "파일"이 없습니다.

이것은 좀 너무 단순합니다. 자세한 내용은 Rago & Stevens의 "UNIX 환경의 고급 프로그래밍"에서 신호에 대한 장을 참조하세요.

"기본 신호 처리"는 두 부분으로 구성됩니다. 이것들은 모두 커널에 내장되어 있습니다. 스케줄러는 프로세스에 보류 중인 신호가 있음을 발견하면 필요한 경우 해당 프로세스에 CPU(컨텍스트 전환)를 제공합니다. 다음으로 신호가 프로세스에 전달됩니다. 프로세스에는 신호 마스크가 있습니다. 마스크를 의도적으로 설정하면 두 신호 SIGKILL 및 SIGSTOP을 무시하거나 차단할 수 없습니다. 이제 프로세스에는 신호가 있습니다. 핸들러가 설정되지 않으면 커널은 신호에 대한 기본 조치를 취합니다.

신호에 대한 기본 작업 목록이 있습니다. 예를 들어 SIGSEGV는 코어를 덤프한 후 프로세스를 종료합니다. Michael Kerrisk는 기본 동작에 대해 설명합니다. 내 생각엔 그게 바로 당신이 원하는 것 같아요.

http://man7.org/linux/man-pages/man7/signal.7.html

커널에는 이러한 모든 신호에 대한 프로세스의 기본 응답을 처리하는 코드가 있습니다.

커널이 "self" 신호를 받으면(우리가 말하는 UNIX 버전에 따라 다름) 커널이 패닉을 일으키고 크래시 덤프를 작성하여 사용자에게 두통을 안겨줍니다. - 당신이 원하는 게 아닌가요?

관련 정보