RECENT POSTS

최근에 작성한 글

01 / 03

전체 글

전체 보기

[Linux] 시그널

1. 시그널 송수신

시그널 : 어떤 이벤트가 발생했음을 알려주기 위해 사용 → 구체적인 데이트 X 시그널 종류만 전달 가능

방향성이 있음어 단순히 시그널의 종류에 따라 동작을 취함.

2. 시그널의 종류

POSIX 표준에 정의되어 있음

📌 SIGABRT : 리눅스의 시스템 콜 중 하나인 abort() 함수에서 보내는 시그널 : 어떤 조건을 만족하지 않는 경우 프로그램을 의도적으로 종료 → 오류를 발견하고 수정하는데 도움

📌 SIGALRM : 프로세스가 정의한 타이머가 만료될 때 발생하는 시그널

📌 SIGCHLD : 자식 프로세스가 종료됐을 때 부모 프로세스에 전송하는 시그널

📌 SIGSTOP : 프로세스 동작을 중단하라는 시그널 → 재시작 시그널(SIGCONT)를 받으면 프로세스가 중단된 상태 그대로 시작

📌 SIGHUP : 설정 다시 읽기

📌 SIGINT : 사용자가 인터럽트 발생시켰다는 시그널

📌 SIGSEGV : 메모리 세그먼트를 사용할 때 규칙을 위반했다는 시그널

📌 SIGKILL & SIGTERM : 프로세스를 종료하라는 시그널

3. 시그널 처리 방법

기본 처리 방법 설명 주요 시그널

기본 처리 방법 설명 주요 시그널
프로세스 정렬 시스널을 수신하면 프로세스가 종료 SIGALRM SIGHUP SIGINT
SIGPIPE SIGTERM SIGKILL SIGUSR1 SIGUSR2
프로세스 중단 프로세스가 중단 SIGSTOP SIGTSTP
프로세스 시작 중단했던 프로세스가 다시 시작 SIGCONT
무시 프로세스가 시그널을 수신해도 아무런 행위를 하지 않음 SIGCHILD SIGURG
코어 덤프 코어 덤프 파일을 생성하고 프로세스는 종료. 디버거로 코어 덤프 파일을 읽어 문제가 발생한 순간의 메모리와 레지스터 상태 정보를 파악 SIGABRT SIGBUS SIGQUIT SIGSEGV SIGFPE

🖥️ 실습

4. 실습 : 시그널 전송하기

1. Kill로 시그널 전송하기

kill [옵션] PID

2. Killall로 시그널 전송하기

시그널을 보낼 프로세스의 PID를 입력하는 대신 프로그램 이름으로 대상 프로세스를 지정

killall [옵션] 프로그램_이름