리눅스의 시그널(Signal)은 운영 체제와 프로세스 간, 또는 프로세스끼리의 통신을 가능하게 하는 소프트웨어 인터럽트입니다. 시그널은 특정 이벤트를 알리거나 특정 동작을 수행하도록 프로세스를 제어하는 데 사용됩니다.
1. 리눅스 시그널의 작동 원리
1.1 시그널의 전달
- 커널이 시그널을 발생시키거나, 프로세스가 다른 프로세스에 시그널을 보냅니다.
- 시그널은 프로세스 ID(PID)를 기반으로 특정 프로세스에 전달됩니다.
1.2 시그널 처리
시그널을 받은 프로세스는 다음 중 하나를 수행할 수 있습니다:
기본 동작 수행:
- 각 시그널은 기본 동작이 정의되어 있습니다.
- 예:
SIGKILL
은 기본적으로 프로세스를 종료.
사용자 정의 핸들러:
- 프로세스가 사용자 정의 시그널 핸들러를 정의하면, 시그널에 대한 기본 동작을 변경할 수 있습니다.
무시:
- 대부분의 시그널은 무시 가능합니다(
SIGKILL
과SIGSTOP
제외).
- 대부분의 시그널은 무시 가능합니다(
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 시그널 발생
- 시그널은 다음 방법 중 하나로 발생합니다:
- 사용자에 의해: 키보드 입력(Ctrl + C 등)으로 시그널 전송.
- 프로세스에 의해: 한 프로세스가 다른 프로세스에 시그널 전송.
- 커널에 의해: 특정 이벤트(예: 메모리 초과, 잘못된 명령 실행) 발생 시 커널이 시그널을 생성.
3.2 시그널 전달
kill
명령어:
예:kill -<시그널 번호> <PID>
SIGTERM
전송kill -15 12345
kill
명령의 기본 동작:- 별도로 시그널을 지정하지 않으면 기본적으로
SIGTERM
(15번) 시그널을 보냅니다.
- 별도로 시그널을 지정하지 않으면 기본적으로
4. 시그널 처리
4.1 기본 동작
- 대부분의 시그널은 기본 동작이 미리 정의되어 있습니다:
- 프로세스 종료, 중단, 재개, 무시 등.
4.2 사용자 정의 시그널 핸들러
- 개발자는 특정 시그널에 대해 사용자 정의 동작을 정의할 수 있습니다.
- 예:
SIGUSR1
을 사용하여 로그 파일 회전을 수행.
4.3 무시
- 프로세스는
SIGKILL
과SIGSTOP
을 제외한 대부분의 시그널을 무시할 수 있습니다.
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. 주의 사항
SIGKILL
사용:SIGKILL
은 프로세스가 종료 전에 정리 작업을 수행할 기회를 제공하지 않으므로, 데이터 손실 가능성이 있습니다.- 가능하면
SIGTERM
을 먼저 사용하여 정상 종료를 요청하세요.
시스템 프로세스 종료 주의:
- 중요한 시스템 프로세스를 종료하면 시스템 안정성에 영향을 줄 수 있습니다.
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 |