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 |