Signal: 두 판 사이의 차이

youngwiki
편집 요약 없음
37번째 줄: 37번째 줄:


==The transfer of a signal==
==The transfer of a signal==
[[파일:SignalHandling.png|섬네일|400x400픽셀|signal handler가 signal을 캐치하는 기본적인 흐름]]
시그널이 대상 프로세스로 전달되는 과정은 다음 두 가지의 명확한 단계로 이루어진다.
시그널이 대상 프로세스로 전달되는 과정은 다음 두 가지의 명확한 단계로 이루어진다.
# Sending a signal
# Sending a signal
#* 커널은 destination 프로세스의 context 일부 상태를 업데이트하여 해당 프로세스에 시그널을 보낸다. 시그널이 전달되는 이유는 두 가지 중 하나이다:
#* 커널은 destination 프로세스의 context 일부 상태를 업데이트해 해당 프로세스에 시그널을 보낸다. 다음은 signal이 전달되는 경우이다.
#*# 커널이 0으로 나누기 오류나 자식 프로세스의 종료와 같은 시스템 이벤트를 감지했을 때
#*# 커널이 0으로 나누기 오류나 자식 프로세스의 종료와 같은 시스템 이벤트를 감지했을 때
#*# 한 프로세스가 kill 함수를 호출하여 명시적으로 커널에게 대상 프로세스에 signal을 보내도록 요청했을 때  
#*# 한 프로세스가 kill 함수를 호출하여 명시적으로 커널에게 대상 프로세스에 signal을 보내도록 요청했을 때  
45번째 줄: 46번째 줄:
# Receiving a signal
# Receiving a signal
#* destination 프로세스는 커널이 해당 시그널의 전달에 반응하도록 강제할 때 시그널을 받는다. 프로세스는 시그널에 대해 다음 세 가지 중 하나의 반응을 할 수 있다:
#* destination 프로세스는 커널이 해당 시그널의 전달에 반응하도록 강제할 때 시그널을 받는다. 프로세스는 시그널에 대해 다음 세 가지 중 하나의 반응을 할 수 있다:
#*# signal을 무시(Ignore)
#*#signal을 무시(Ignore)
#*# 프로세스를 종료(Terminate)
#*# 프로세스를 종료(Terminate)
#*# 사용자 수준 함수인 signal handler을 실행하여 시그널을 catch하여 처리
#*# 사용자 수준 함수인 signal handler을 실행하여 시그널을 catch하여 처리

2025년 3월 15일 (토) 16:37 판

상위 문서: Signals and Nonlocal jumps

개요

signal이란 시스템에서 어떤 종류의 이벤트가 발생했음을 프로세스에 알리는 작은 메시지이다. signal은 이를 위해서 kernel에서 process로 보내지며, signal type은 1~30의 정수로 식별된다. 이때 어떤 signal에 저장된 정보는 해당 ID와 그 signal이 도착했다는 사실 뿐이다. 아래는 몇가지 signal ID와 그에 대응되는 signal들을 나타낸 표이다.

ID Name Default Action Corresponding Event
2 SIGINT Terminate User typed ctrl-c
9 SIGKILL Terminate Kill program(cannot override or ignore)
11 SIGSEGV Terminate Segmentation violation
14 SIGALRM Terminate Timer Signal
17 SIGCHLD Ignore Child stopped or terminated

The transfer of a signal

signal handler가 signal을 캐치하는 기본적인 흐름

시그널이 대상 프로세스로 전달되는 과정은 다음 두 가지의 명확한 단계로 이루어진다.

  1. Sending a signal
    • 커널은 destination 프로세스의 context 일부 상태를 업데이트해 해당 프로세스에 시그널을 보낸다. 다음은 signal이 전달되는 경우이다.
      1. 커널이 0으로 나누기 오류나 자식 프로세스의 종료와 같은 시스템 이벤트를 감지했을 때
      2. 한 프로세스가 kill 함수를 호출하여 명시적으로 커널에게 대상 프로세스에 signal을 보내도록 요청했을 때
    • 프로세스는 자기 자신에게 시그널을 보낼 수도 있다.
  2. Receiving a signal
    • destination 프로세스는 커널이 해당 시그널의 전달에 반응하도록 강제할 때 시그널을 받는다. 프로세스는 시그널에 대해 다음 세 가지 중 하나의 반응을 할 수 있다:
      1. signal을 무시(Ignore)
      2. 프로세스를 종료(Terminate)
      3. 사용자 수준 함수인 signal handler을 실행하여 시그널을 catch하여 처리

각주