리눅스의 개요 - 시그널이란?

2022. 1. 27. 02:32리눅스마스터 1급 - 필기/리눅스 실무의 이해

시그널(signal)이란 어떠한 이벤트가 발생했을 때 신호(시그널)를 보내서 알려주는 것을 말합니다.

예를 들어 리눅스에서 Ctrl + z 를 누르면 프로세스를 중단 시키는 신호인 SIGTSTP를 보내는 것입니다. 이와 같은 시그널은 1번부터 62번까지 있으며 kill -l 명령어를 통해 확인 할 수 있습니다. 

이들 중 주로 사용하는 시그널에 대해 알아보겠습니다.

 

 

1. SIGHUP : HangUP의 약어로 로그아웃과 같은 터미널에서 접속이 끊어졌을때 보내는 시그널입니다. 리눅스의 데몬 관련 환경 설정 파일의 변경된 내용을 변경 시키기 위해 reboot 시킬때도 이 시그널이 보내집니다.

 

2. SUGINT : Ctrl + c 입력 시에 보내지는 시그널입니다. 키보드로부터 오는 입력으로 실행을 중지하는 시그널입니다.

 

3. SIGQUIT : Ctrl + \ 입력 시에 보내지는 실행 중지 시그널입니다. 기본적으로 코어를 덤프하는 역할을 합니다.

 

코어 덤프 : 프로그램의 비정상적인 종료시 커널에서 해당 프로세스와 관련된 메모리 상태를 기록한 파일입니다.

 

4. SIGILL : 잘못된 명령을 사용했을때 보내지는 시그널입니다.

 

5. SIGTRAP : 트랩 추적


6. SIGABRT : ABRT(Automatic Bug Reporting Tool), 즉 자동 버그 보고 도구라는 뜻으로 시스템에 버그 발생시에 보내지는 시그널입니다. 


7. SIGBUS : 버스 에러

 

9. SIGKILL : kill 명령의 강제로 프로세스 종료 시킬때 사용합니다. 좀비 프로세스와 같은 정상적인 방법으로 종료되지 않는 프로세스에 사용합니다.

 

11. SIGSEGV : 잘못된 메모리 관리로 인해 발생하는 신호로 메모리를 잘못 참조하면 보내지는 신호입니다.

 

15. SIGTERM : terminate 제거하다의 약자로 kill 명령의 기본 시그널입니다. 프로세스 정상 종료 시킬때 사용합니다.

 

17. SIGCHILD : 자식 프로세스가 stop 되거나 종료되었을 때 부모에게 전달되는 신호입니다.

 

18. SIGCONT : 정지된 프로세스를 다시 실행시킬 때 사용됩니다.

 

19. SIGSTOP : 프로세스를 정지시킬 때 사용되는 시그널이며 SIGCONT 시그널로 다시 실행시킬 수 있습니다.

 

20. SIGTSTP : ctrl + z 입력시에 보내지는 시그널입니다. 실행을 정지시킨뒤 다시 실행을 위해 잠시 대기시키는 시그널입니다. SIGCONT 시그널로 다시 실행시킬 수 있습니다.

 

kill : 프로세스에 특정한 시그널을 보내는 명령으로 PID를 사용해서 프로세스를 종료시킵니다.

kill 옵션 PID 또는 %작업번호 형식으로 사용됩니다.

-9 : 강제 종료

-15 : 기본값으로 아무런 시그널 지정 없이 사용시 전송되는 시그널입니다.

-s : 시그널을 번호가 아닌 이름으로 지정할 수 있게 해주는 옵션입니다.

 

killall : kill 명령어와 매우 유사하며 같은 데몬의 여러 프로세스를 한 번에 종료시킬 때 사용하는 명령으로 프로세스명을 사용합니다. 시그널을 지정하지 않으면 종료 시그널이 전송됩니다.

killall 옵션 프로세스명 형식으로 사용됩니다.

 

옵션 

-s : 시그널을 지정합니다.

-u : 특정 사용자의 프로세스를 지정합니다.

-v : 시그널이 전송된 결과를 출력합니다.

 

killall -9 -u keum : keum 사용자의 모든 프로세스를 종료시킵니다.

 

pkill : 프로세스명을 사용해서 특정 프로세스에 시그널을 보낼때 사용합니다. kill 명령어와 마찬가지로 기본 시그널은 15번 입니다.

 

옵션

-u : 특정 사용자가 실행시킨 프로세스의 PID에 시그널을 보냅니다.

-U : 특정 UID를 갖는 사용자가 실행시킨 프로세스에 시그널을 보냅니다.

-g : 특정 그룹이 실행시킨 프로세스의 PID에 시그널을 보냅니다.

-G : 특정 GID를 갖는 그룹이 실행시킨 프로세스의 PID에 시그널을 보냅니다.

 

pgrep : 프로세스를 이름으로 검색하는 명령으로 PID 값을 출력합니다. 옵션을 사용하면 프로세스명 뿐만 아니라 사용자명과 그룹명으로도 PID 조회가 가능합니다.

 

옵션

-u : 특정 사용자가 실행시킨 프로세스의 PID를 조회합니다.

-U : 특정 UID를 갖는 사용자가 실행시킨 프로세스의 PID를 조회합니다.

-g : 특정 그룹이 실행시킨 프로세스의 PID를 조회합니다.

-G : 특정 GID를 갖는 그룹이 실행시킨 프로세스의 PID를 조회합니다.