리눅스 시그널 번호
리눅스에서 시그널(signal)은 프로세스 간의 통신을 위한 메커니즘으로, 특정 이벤트나 작업을 알리기 위해 사용됩니다. 시그널은 주로 프로세스를 제어하거나, 종료시키거나, 다른 특정 작업을 요청하는 데 사용됩니다. 이 글에서는 리눅스에서 사용하는 주요 시그널 번호와 그 의미를 소개합니다.
1. 리눅스 시그널 개요
리눅스에서는 프로세스가 실행 중에 여러 가지 시그널을 수신할 수 있습니다. 이 시그널들은 운영체제에서 지정한 특정 번호로 식별되며, 각 시그널은 특정한 작업을 요청하는 기능을 합니다. 시그널은 kill 명령어, 프로세스 관리 툴 또는 프로그램 코드 내에서 발생할 수 있습니다.
시그널을 보내면 해당 프로세스가 시그널을 처리하고 지정된 작업을 수행하게 됩니다. 리눅스에서 지원하는 시그널 번호는 고유하며, 각 시그널에는 번호와 이름, 그리고 그에 따른 동작이 있습니다.
2. 주요 리눅스 시그널 번호
리눅스에서 자주 사용되는 시그널 번호와 그 의미는 다음과 같습니다.
시그널 번호 | 시그널 이름 | 설명 |
1 | SIGHUP | 터미널 연결 종료 또는 터미널 설정 재로드 |
2 | SIGINT | 인터럽트, 주로 Ctrl+C로 프로세스를 종료 |
3 | SIGQUIT | 종료 시 프로세스 상태를 코어 덤프와 함께 종료 |
9 | SIGKILL | 강제 종료, 프로세스를 즉시 종료, 프로세스가 처리할 수 없음 |
15 | SIGTERM | 정상 종료, 종료 요청 시 사용 (기본 종료 시그널) |
17 | SIGCHLD | 자식 프로세스 종료 후 부모 프로세스에 알림 |
19 | SIGSTOP | 프로세스를 일시 정지, SIGCONT로 다시 시작 가능 |
20 | SIGTSTP | Ctrl+Z, 프로세스를 대기(suspend)로 전환 |
30-37 | SIGUSR1/SIGUSR2 | 사용자 정의 시그널, 응용 프로그램에서 사용 가능 |
28 | SIGALRM | 타이머 종료 시 발생 |
11 | SIGSEGV | 세그멘테이션 오류, 잘못된 메모리 접근 시 발생 |
14 | SIGPIPE | 파이프가 종료된 후, 더 이상 데이터를 보낼 수 없을 때 발생 |
3. 시그널 사용 예시
리눅스에서 시그널을 사용하여 프로세스를 제어하는 방법은 여러 가지가 있습니다. 가장 많이 사용되는 시그널은 SIGKILL과 SIGTERM입니다. 이를 통해 프로세스를 강제 종료하거나 정상적으로 종료할 수 있습니다.
1) kill 명령어를 이용한 시그널 보내기
kill 명령어를 사용하여 특정 프로세스에 시그널을 보낼 수 있습니다. 예를 들어, 프로세스 ID가 12345인 프로세스에 종료 시그널을 보내려면 아래와 같이 명령을 입력합니다.
기본적으로 kill 명령어는 SIGTERM(15번) 시그널을 보내며, 프로세스를 정상적으로 종료합니다. 만약 프로세스가 종료되지 않으면, SIGKILL(9번) 시그널을 사용할 수 있습니다.
2) kill 명령어를 사용한 사용자 정의 시그널 보내기
리눅스에서 사용자 정의 시그널인 SIGUSR1 또는 SIGUSR2를 사용하여 애플리케이션에 특정 작업을 요청할 수 있습니다. 예를 들어, SIGUSR1을 보내면 로그 파일을 갱신하도록 요청할 수 있습니다.
여기서 -10은 SIGUSR1 시그널을 나타냅니다.
4. 결론
리눅스에서 시그널은 프로세스 제어와 통신을 위한 중요한 도구입니다. 프로세스 간의 상호작용을 가능하게 하고, 시스템의 동작을 효율적으로 관리하는 데 필수적인 요소입니다. 각 시그널 번호와 그 동작을 이해하고 활용함으로써, 리눅스에서 보다 효과적인 시스템 관리와 개발을 할 수 있습니다.