시그널 보내

전두엽힘주기·2025년 4월 23일

Computer System

목록 보기
6/13
post-thumbnail
  • 시그널은 리눅스/유닉스 운영체제에서 제공하는 상위 수준의 소프트웨어 기반 예외 처리 메커니즘

  • 비동기적으로 발생(unexpected)하여, 하나의 프로세스가 다른 프로세스에 영향을 줄 수 있는 방식으로 동작, external event

시그널은 특정 이벤트가 발생했을 때 해당 프로세스에 전달됨
프로세스 중단, 종료, 재시작, 무시 등 다양한 동작을 유도

예: 사용자가 Ctrl+C를 입력하면, 커널이 현재 프로세스에 SIGINT 시그널을 보냄

시그널 용어 및 동작 흐름

시그널 보내기 (Sending a Signal)
시그널이 목적지 프로세스로 전달되는 두 가지 주요 방식:

(1) 커널이 시스템 이벤트를 감지했을 때 자동 발생
예시:

0으로 나누기 → SIGFPE

잘못된 메모리 접근 → SIGSEGV

자식 프로세스 종료 → SIGCHLD

➡ 커널이 자동으로 해당 프로세스에 시그널을 보냄

(2) 프로세스가 명시적으로 시그널을 보낼 때
사용자 프로세스가 kill() 시스템 호출을 통해 시그널을 다른 프로세스에 보냄

함수 시그니처: int kill(pid_t pid, int sig);

예: kill(1234, SIGTERM); → PID 1234번 프로세스에 SIGTERM 시그널 전송

⚠️ 프로세스는 자기 자신에게 시그널을 보낼 수 없음 (단, raise() 같은 함수는 예외적으로 자기 자신에게도 가능)

0개의 댓글