Linux

[kill] 프로세스에 시그널 전달

비번변경 2022. 5. 24. 22:57

시그널(SIGNAL)

프로세스에게 이벤트의 발생을 알리기 위해 전달되는 소프트웨어 인터럽트의 일종

사전적인 의미로 '신호'를 뜻하며, 리눅스에서는 프로세스끼리 서로 통신할 때 사용한다.

시그널을 발생시키는 이벤트는 Hardware Exception, Software Condition, 사용자 입력, 시스템 콜 등이 해당된다.

💡 인터럽트 (Interrupt)
갑자기 발생하는 비동기적인 통지나 이벤트
하드웨어 관점에서는 하드웨어의 변화를 감지해서 외부 입력으로 전달되는 전기 신호
인터럽트가 발생하면 프로세스는 동작을 중지하고 인터럽트 벡터와 핸들러를 실행하여 하드웨어 변화를 처리한다.

 

시그널은 비신뢰성과 대기하지 않는다는 성질을 가진다.

  • 비신뢰성 : 시그널을 보낸 후 시그널의 도착했는지 확인하지 않는다.
  • 대기하지 않음 : 시그널 처리 중에 도착한 시그널은 무시된다.

 

 

시그널 종류

자주 사용하는 시그널 목록은 아래와 같다.

번호 시그널(Signal) 설명 단축키
1 SIGHUP Hangup, 접속을 끊을 때, 터미널과 연결이 끊어졌을 때  
2 SIGINT Interrupt, 현재 작동 중인 프로그램의 동작을 멈출 때 사용 Ctrl + c
3 SIGQUIT Quit, 사용자가 터미널에서 종료키를 누를 때 Ctrl + \(역슬래시)
6 SIGABRT Abort(비정상 종료) 함수에 의해 발생할 때  
9 SIGKILL Kill, 실행 중인 프로세스 강제 종료할 때 사용  
11 SIGSEGV Segmentation Violation, 메모리 액세스가 잘못되었을 때 발생  
13 SIGPIPE 종료된 소켓에 쓰기를 시도할 때  
14 SIGALRM 알람 타이머 만료 시에 사용  
15 SIGTERM Terminate, 정상적인 종료 방법  
17 SIGCHLD 자식 프로세스가 종료할 때 사용  
18 SIGCONT 중지된 프로세스 실행할 때 사용  
19 SIGSTOP SIGCONT 시그널을 받을 때에 사용  
20 SIGTSTP 프로세스 대기로 전환할 때 사용 Ctrl + z

 

 

kill

특정한 프로세스에 시그널을 전달하는 명령어

전달할 시그널을 지정하지 않으면 기본적으로 SIGTERM(정상 종료)를 전달한다.

kill <PID>
# -n : 시그널 번호 지정
# -s : 시그널 이름 지정

# 예시
kill -n 1 6348
kill -1 6348
kill -s SIGKILL 7246
kill -SIGKILL 7246

시그널 이름 또는 번호를 지정하여 시그널을 전달한다. 보통 -1(SIGHUP, 프로세스 재활성화)와 -9(SIGKILL, 프로세스 강제 종료)를 많이 사용한다.

 

시그널 목록 확인

시그널의 종류는 대부분 비슷하지만 OS 마다 차이가 있을 수 있다.

kill -l

kill -l

 

프로세스 강제 종료

일반적으로 프로세스를 종료하는 명령어

kill -9 <PID>

는, 프로세스에 SIGKILL(종료) 뜻하는 시그널 번호를 전달하는 명령어다.

 

프로세스 정상 종료

프로세스 정상 종료(Terminate) 시에는 SIGTERM 시그널을 전달한다.

kill -15 <PID>

 

 

 

https://banabina.github.io/linux/interrupt/

https://jobdamuny.tistory.com/52

https://jhnyang.tistory.com/143

 

[리눅스 / 유닉스 ] 시그널이란? 시그널(SIGNAL) 종류, 상황, 유사 시그널 차이점

[리눅스 유닉스 완전 정복 목차] 안녕하세요~ 오늘은 시그널 SIGNAL 에 대한 간략 포스팅을 진행하고자 합니다! 트와이스의 곡 시그널이 유행(?)하면서 시그널이 신호를 의미한다는건 다들 알고 계

jhnyang.tistory.com