리눅스의 시그널(Signal)은 운영 체제와 프로세스 간, 또는 프로세스끼리의 통신을 가능하게 하는 소프트웨어 인터럽트입니다. 시그널은 특정 이벤트를 알리거나 특정 동작을 수행하도록 프로세스를 제어하는 데 사용됩니다.


1. 리눅스 시그널의 작동 원리

1.1 시그널의 전달

  • 커널이 시그널을 발생시키거나, 프로세스가 다른 프로세스에 시그널을 보냅니다.
  • 시그널은 프로세스 ID(PID)를 기반으로 특정 프로세스에 전달됩니다.

1.2 시그널 처리

시그널을 받은 프로세스는 다음 중 하나를 수행할 수 있습니다:

  1. 기본 동작 수행:

    • 각 시그널은 기본 동작이 정의되어 있습니다.
    • 예: SIGKILL은 기본적으로 프로세스를 종료.
  2. 사용자 정의 핸들러:

    • 프로세스가 사용자 정의 시그널 핸들러를 정의하면, 시그널에 대한 기본 동작을 변경할 수 있습니다.
  3. 무시:

    • 대부분의 시그널은 무시 가능합니다(SIGKILLSIGSTOP 제외).

2. 주요 리눅스 시그널 종류

시그널 이름 번호 기본 동작 설명
SIGHUP 1 종료 또는 재시작 터미널 연결 종료, 데몬 재시작에 사용
SIGINT 2 종료 키보드 인터럽트(Ctrl + C)
SIGQUIT 3 종료 + Core 덤프 키보드 종료 신호(Ctrl + )
SIGKILL 9 강제 종료 프로세스를 강제 종료 (무시 불가)
SIGTERM 15 종료 요청 프로세스에 종료 요청 (기본적으로 사용)
SIGSTOP 19 중단 프로세스를 중단 (무시 불가)
SIGCONT 18 재개 중단된 프로세스를 재개
SIGUSR1 10 사용자 정의 동작 사용자 정의 작업 수행
SIGUSR2 12 사용자 정의 동작 사용자 정의 작업 수행
SIGALRM 14 종료 알람 타이머가 만료되었을 때 발생

3. 시그널의 동작 방식

3.1 시그널 발생

  • 시그널은 다음 방법 중 하나로 발생합니다:
    1. 사용자에 의해: 키보드 입력(Ctrl + C 등)으로 시그널 전송.
    2. 프로세스에 의해: 한 프로세스가 다른 프로세스에 시그널 전송.
    3. 커널에 의해: 특정 이벤트(예: 메모리 초과, 잘못된 명령 실행) 발생 시 커널이 시그널을 생성.

3.2 시그널 전달

  • kill 명령어:
    kill -<시그널 번호> <PID>
    예: SIGTERM 전송
    kill -15 12345
  • kill 명령의 기본 동작:
    • 별도로 시그널을 지정하지 않으면 기본적으로 SIGTERM(15번) 시그널을 보냅니다.

4. 시그널 처리

4.1 기본 동작

  • 대부분의 시그널은 기본 동작이 미리 정의되어 있습니다:
    • 프로세스 종료, 중단, 재개, 무시 등.

4.2 사용자 정의 시그널 핸들러

  • 개발자는 특정 시그널에 대해 사용자 정의 동작을 정의할 수 있습니다.
  • 예: SIGUSR1을 사용하여 로그 파일 회전을 수행.

4.3 무시

  • 프로세스는 SIGKILLSIGSTOP을 제외한 대부분의 시그널을 무시할 수 있습니다.

5. 주요 명령어

5.1 시그널 목록 확인

  • 시스템에서 사용 가능한 모든 시그널을 확인하려면:
    kill -l

출력 예시:

 1) SIGHUP   2) SIGINT   3) SIGQUIT   4) SIGILL   ...

5.2 특정 프로세스에 시그널 전송

  • 특정 프로세스 종료:
    kill -9 <PID>
  • 사용자 정의 시그널 전송:
    kill -10 <PID>  # SIGUSR1

5.3 모든 프로세스 종료

  • 특정 프로세스 이름으로 모든 프로세스 종료:
    pkill -9 <프로세스 이름>

6. 시그널 활용 사례

6.1 프로세스 종료

  • SIGTERM으로 종료 요청 후, 응답이 없으면 SIGKILL로 강제 종료:
    kill -15 <PID>  # SIGTERM
    kill -9 <PID>   # SIGKILL

6.2 데몬 재시작

  • SIGHUP을 사용하여 데몬 프로세스 재시작:
    kill -1 <PID>

6.3 프로세스 일시 중단 및 재개

  • 프로세스를 중단:
    kill -19 <PID>  # SIGSTOP
  • 중단된 프로세스를 재개:
    kill -18 <PID>  # SIGCONT

7. 주의 사항

  1. SIGKILL 사용:

    • SIGKILL은 프로세스가 종료 전에 정리 작업을 수행할 기회를 제공하지 않으므로, 데이터 손실 가능성이 있습니다.
    • 가능하면 SIGTERM을 먼저 사용하여 정상 종료를 요청하세요.
  2. 시스템 프로세스 종료 주의:

    • 중요한 시스템 프로세스를 종료하면 시스템 안정성에 영향을 줄 수 있습니다.

8. 요약

  • 시그널(Signal)은 리눅스에서 프로세스를 제어하고 이벤트를 알리기 위한 중요한 메커니즘입니다.
  • 각 시그널은 특정 이벤트를 나타내며, 기본 동작 또는 사용자 정의 동작을 수행할 수 있습니다.
  • 일반적인 명령어와 시그널 번호를 기억하면 프로세스 제어에 매우 유용합니다.

리눅스의 시그널은 시스템 안정성과 제어를 위해 필수적인 도구로, 이를 이해하면 효율적으로 리눅스 환경을 관리할 수 있습니다. 😊

'Docker' 카테고리의 다른 글

자주 사용하는 Docker 명령어  (0) 2024.12.03
[/tmp] 리눅스의 템프 디렉토리(Temporary Directory)  (0) 2024.12.03
Dockerfile  (0) 2024.12.03
Alpine  (0) 2024.12.03
Docker Redis  (0) 2024.12.03

+ Recent posts