본문 바로가기

리눅스-기초명령어/프로세스 관리

kill 명령어

kill

프로세스에 시그널을 보낼때 사용한다.

 

사용법

kill [옵션 혹은 시그널] [PID]

 

옵션

l [시그널] : 사용 가능한 시그널의 종류를 보여준다. 뒤에 [시그널]을 붙이지 않으면 모든 시그널을 출력한다.

s [시그널] : 사용할 시그널의 종류를 지정한다. 시그널의 이름 혹은 번호를 기입한다. s를 생략해서 사용할 수 도 있다 kill -SIGKILL  .

 

시그널의 종류

번호 시그널  의 미 
1 SIGHUP 터미널에서 접속이 끊겼을때 보내지는 시그널, 변화된 내용을 적용하기 위해 재시작 할 때 사용된다. 
2 SIGINT 인터럽트 시그널로 실행을 종료시킴, Ctrl + c 입력시 보내지는 시그널 
3 SIGQUIT 실행 종료 시그널로서 Ctrl + \ 입력시 보내지는 시그널 
9 SIGKILL 프로세스를 강제로 종료 시키는 시그널 
15 SIGTERM kill의 기본 시그널로 정상 종료 시키는 시그널 
18 SIGCONT 시그널에 의해 정지된 프로세스를 다시 실행시키는 시그널 
19 SIGSTOP 정지 시그널 
20 SIGTSTP 일시정지 시키는 시그널로서 Ctrl + z 입력시 보내지는 시그널 

      

SIGKILL과  SIGTERM의 차이점

SIGTERM은 가능한 정상종료를 시키는 시그널 이지만 SIGKILL은 프로세스를 강제로 종료시키는 시그널이다. 

따라서 SIGKILL로 종료했을때 생기는 데이터 파손이나 유실이 될 수 있다.



사용예시  

 

SIGINT

[root@linux ~]# sleep 500 &
[1] 11591
[root@linux ~]# kill -2 11591
[1]+  Interrupt               sleep 500  해당작업을 성공적으로                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               kill하였다.
[root@linux ~]# jobs        jobs 로 확인해보면 작업이 없다.
[root@linux ~]

 

SIGSTOP, SIGCONT

[root@linux ~]# sleep 300 &
[1] 12709
[root@linux ~]# jobs
[1]+  Running                 sleep 300 &
[root@linux ~]# kill -SIGSTOP 12709
[1]+  Stopped                 sleep 300
[root@linux ~]# kill -SIGCONT 12709
[root@linux ~]# jobs
[1]+  Running                 sleep 300 &

 

SIGTSTP

[root@linux ~]# sleep 3000
# 새로운 터미널 창에서 입력
[root@linux ~]# ps -e -o pid,comm | grep sleep
  14096 sleep
[root@linux ~]# kill -20 14096
[root@linux ~]# jobs #원래 터미널에 들어와서 확인
[1]+  Stopped                 sleep 3000

killall

특정 시그널을 한꺼번에 종료할 때 사용한다. 하지만 위험성이 있기에 

자주 사용되지 않는다. 사용방법은 kill과 다르게 프로세스 이름을 

사용해 종료 시킬수 있다.

 

[root@Linux ~]# for i in {1..3}; do sleep 500 & done
[1] 3866
[2] 3867
[3] 3868                       프로세스를 임의로 만듭니다.
[root@Linux ~]# ps -ef | grep sleep
root        3866    3395  0 10:59 pts/0    00:00:00 sleep 500
root        3867    3395  0 10:59 pts/0    00:00:00 sleep 500
root        3868    3395  0 10:59 pts/0    00:00:00 sleep 500
root        3877    3395  0 11:00 pts/0    00:00:00 grep --color=auto sleep
[root@Linux ~]# kill 3868      pid 3868 프로세스를 kill한다.
[root@Linux ~]# ps -ef | grep sleep
root        3866    3395  0 10:59 pts/0    00:00:00 sleep 500
root        3867    3395  0 10:59 pts/0    00:00:00 sleep 500
root        3879    3395  0 11:00 pts/0    00:00:00 grep --color=auto sleep                  pid 3868프로세스가 없어진것을 확인한다.
[3]+  Terminated              sleep 1000
[root@Linux ~]# killall sleep 해당 sleep 이라는 프로세스를 모두kill한다.
[1]-  Terminated              sleep 1000
[2]+  Terminated              sleep 1000
[root@Linux ~]# ps -ef | grep sleep
root        3893    3395  0 11:01 pts/0    00:00:00 grep --color=auto sleep                         
슬립의이름을 갖는 프로세스를 모두
kill하였음을 확인할 수 있다.

 

pkill

프로세스 이름을 사용하여 특정 프로세스에 시그널을 보낼 때 사용한다.

 

사용법

pkill [옵션] [패턴]

 

옵션

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

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

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

-G : 특정 GID를 갖는 사용자가 실행시킨 프로세스에 시그널을 보낸다.

-t : 특정 터미널에 실행 중인 프로세스의 PID에 시그널을 보낸다.

 

사용 예시

  • -u
# 새로운 터미널 창을 열고 admin으로 접속을 한후
[admin@Linux ~]# ssh localhost
admin@localhost's password:
Last login: Tue May  2 11:50:53 2023 from ::1
[root@Linux ~]# w #기존 터미널창으로 돌아와 admin의 접속 기록을 확인
12:51:00 up 12:25,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty2      Fri09    4days  0.04s  0.04s /usr/libexec/gnome-session-bina
admin    pts/2     12:50   43.00s  0.01s  0.01s -bash
[root@linux ~]# pkill -9 -u admin # 특정 사용자를 지정하여 시그널을 보냄
[admin@linux ~]$ Killed #어드민의 접속이 끊김

 

  • -t
# 위 예시 처음부분과 동일하게 진행 후 기존 터미널로 넘어온 후
[root@Linux ~]# w
 13:03:52 up 12:38,  2 users,  load average: 0.00, 0.12, 0.14
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty2      Fri09    4days  0.04s  0.04s /usr/libexec/gnome-session-bina
admin    pts/2     12:57    5:57   0.01s  0.01s -bash
[root@linux ~]# pkill -9 -t pts/2
[root@linux ~]# w
13:08:37 up 12:43,  1 user,  load average: 0.00, 0.04, 0.09
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty2      Fri09    4days  0.04s  0.04s /usr/libexec/gnome-session-bina

 

'리눅스-기초명령어 > 프로세스 관리' 카테고리의 다른 글

w  (1) 2023.08.31
pgrep  (0) 2023.08.31
jobs, bg, fg  (1) 2023.08.31
top, htop  (0) 2023.08.31
ps  (0) 2023.08.31