6. 시그널

리눅스에서 시그널 (signal) 은 중요한 이벤트가 발생했음을 프로세스에 알리기 위해 전송되는 소프트웨어 인터럽트입니다. 리눅스 시그널을 이해하는 것은 프로세스와 시스템 동작을 효과적으로 관리하는 데 기본이 됩니다.

시그널의 목적

시그널은 프로세스 간 통신 (IPC) 의 주요 수단 역할을 합니다. 시그널에는 다음과 같은 여러 용도가 있습니다.

  • 사용자 상호작용: 사용자는 Ctrl-C(SIGINT) 또는 Ctrl-Z(SIGTSTP) 와 같은 특수 터미널 문자를 입력하여 포그라운드 프로세스를 중단하거나 일시 중지할 수 있습니다.
  • 커널 알림: 커널은 불법 메모리 접근 (SIGSEGV) 과 같은 하드웨어 또는 소프트웨어 문제를 프로세스에 알리기 위해 시그널을 보낼 수 있습니다.
  • 프로세스 관리: 시스템 관리자 및 다른 프로세스는 프로세스 종료 요청이나 설정 재로드와 같이 다른 프로세스의 수명 주기를 관리하기 위해 시그널을 사용합니다.

시그널 수명 주기

이벤트가 시그널을 생성하면, 먼저 대상 프로세스에 전달됩니다. 시그널은 커널이 프로세스를 실행할 때까지 "보류 중" 상태로 유지됩니다. 프로세스가 스케줄링될 때 시그널이 전달됩니다. 하지만 프로세스는 특정 시그널의 전달을 차단하도록 구성할 수 있는 시그널 마스크를 가지고 있습니다.

시그널이 전달되면, 프로세스는 몇 가지 조치 중 하나를 취할 수 있습니다.

  • 시그널 무시: 프로세스는 단순히 시그널을 폐기하고 실행을 계속합니다.
  • 시그널 처리 (Catch): 프로세스는 이벤트에 응답하기 위해 시그널 핸들러라고 불리는 사용자 정의 함수를 실행합니다.
  • 기본 동작 수행: 처리되거나 무시되지 않으면 기본 동작이 수행됩니다. 많은 시그널의 경우, 이는 프로세스 종료를 의미합니다.
  • 시그널 차단: 시그널이 프로세스의 시그널 마스크에 있는 경우, 차단 해제될 때까지 보류 상태로 유지됩니다.

일반적인 리눅스 프로세스 시그널

각 시그널은 정수로 정의되지만, 거의 항상 SIG로 시작하는 기호 이름 ( os sig code ) 으로 참조됩니다. 숫자는 아키텍처에 따라 약간 다를 수 있지만 이름은 일관성이 있습니다. 다음은 가장 일반적인 리눅스 프로세스 시그널입니다.

  • SIGHUP (1): 끊김 (Hangup). 데몬에게 설정을 다시 로드하도록 지시하는 데 자주 사용됩니다.
  • SIGINT (2): 인터럽트. Ctrl-C로 전송됩니다. 프로세스 종료 요청입니다.
  • SIGKILL (9): 강제 종료 (Kill). 즉각적이고 강력한 종료입니다. 프로세스는 이 시그널을 처리하거나, 무시하거나, 차단할 수 없습니다.
  • SIGSEGV (11): 세그멘테이션 오류. 프로세스가 유효하지 않은 메모리 참조를 했음을 나타냅니다.
  • SIGTERM (15): 종료 (Termination). 프로세스에게 종료를 요청하는 표준적이고 정중한 방법입니다. kill 명령으로 전송되는 기본 시그널입니다. 프로세스는 종료하기 전에 정리 작업을 수행하기 위해 이 시그널을 처리할 수 있습니다. 이는 종종 signal 15 linux라고 불립니다.
  • SIGSTOP: 중지 (Stop). 프로세스를 일시 중지합니다. SIGKILL 과 마찬가지로 처리하거나 무시할 수 없습니다.

The key difference between SIGTERM (linux signal 15) and SIGKILL is that SIGTERM is a request that can be handled, while SIGKILL is a command that destroys the process immediately. (SIGTERM(linux signal 15) 과 SIGKILL 의 주요 차이점은 SIGTERM 은 처리될 수 있는 요청인 반면, SIGKILL 은 프로세스를 즉시 파괴하는 명령이라는 점입니다.)

로그인하여 학습 진행 상황을 저장하세요

로그인

연습 문제

연습이 완벽을 만듭니다! 프로세스에 대한 이해와 프로세스와 상호 작용하기 위해 시그널이 어떻게 사용되는지 강화하기 위한 실습 랩이 있습니다.

  1. 리눅스 프로세스 관리 및 모니터링 - 이 랩에서는 리눅스 시스템에서 프로세스를 관리하고 모니터링하는 필수 기술을 배웁니다. 포그라운드 및 백그라운드 프로세스와 상호 작용하는 방법, ps로 검사하는 방법, top으로 리소스 모니터링하는 방법, renice로 우선순위 조정하는 방법, kill로 종료하는 방법을 살펴봅니다. kill을 사용하여 프로세스를 종료하는 것은 시그널 전송을 직접 적용하는 것입니다.

이 랩은 프로세스 관리 개념과 시그널의 근본적인 사용법을 실제 시나리오에 적용하고 리눅스 시스템 관리 역량을 구축하는 데 도움이 될 것입니다.

퀴즈

차단할 수 없는 시그널은 무엇입니까? 정확한 시그널 이름을 사용하고 대소문자를 주의하여 영어로 답하십시오.