리눅스 시그널 번호
본문 바로가기

리눅스 시그널 번호

액트 2024. 11. 14.

리눅스에서 시그널(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 12345

기본적으로 kill 명령어는 SIGTERM(15번) 시그널을 보내며, 프로세스를 정상적으로 종료합니다. 만약 프로세스가 종료되지 않으면, SIGKILL(9번) 시그널을 사용할 수 있습니다.

kill -9 12345

2) kill 명령어를 사용한 사용자 정의 시그널 보내기

리눅스에서 사용자 정의 시그널인 SIGUSR1 또는 SIGUSR2를 사용하여 애플리케이션에 특정 작업을 요청할 수 있습니다. 예를 들어, SIGUSR1을 보내면 로그 파일을 갱신하도록 요청할 수 있습니다.

kill -10 12345

여기서 -10은 SIGUSR1 시그널을 나타냅니다.

4. 결론

리눅스에서 시그널은 프로세스 제어와 통신을 위한 중요한 도구입니다. 프로세스 간의 상호작용을 가능하게 하고, 시스템의 동작을 효율적으로 관리하는 데 필수적인 요소입니다. 각 시그널 번호와 그 동작을 이해하고 활용함으로써, 리눅스에서 보다 효과적인 시스템 관리와 개발을 할 수 있습니다.

댓글