강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

kill을 이용한 특정프로세스 다루기 실무

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

kill을 이용한 특정프로세스 다루기 실무

 

 

 

 

가장 흔한 용도로 사용되는 kill명령어의 사용방법에 대해서 알아보자.  즉 특정프로세스를 종료하기 위해 사용하는 것이다.

 

 

 

 시그널번호 9번은 특정프로세스를 종료하는 것이다.

 

 

 

 따라서 kill명령어로 시그널번호 9를 보내는 것과 시그널명 SIGKILL을 보내는 것은 모두 지정된 프로세스를 강제종료한다.

 

 

 

 

 

아래의 예는 현재 실행중인 crond프로세스를 확인하고 시그널 9를 보내서 종료하는 예이다.

 

 

 

 

 

먼저, ps로 현재 실행중인 crond PID를 확인하였다.

 

 

 

 확인 결과 현재실행중인 crond PID(프로세스 ID) 3006임을 알 수 있었다.

 

 

 

 그런 다음 “kill -9 1942” crond를 종료 하였다.

 

 

 

 종료된 것을 확인하기 위하여 다시 ps crond의 실행확인을 하였으나 kill에 의해 실행되고 있었던 crond는 종료되었음을 알 수 있다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep crond

root      1491  2216  0 07:40 pts/0    00:00:00 grep --colour=auto crond

root      1942     1  0 07:31 ?        00:00:00 crond

[root@sulinux ~]#

[root@sulinux ~]#kill -9 1942

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep crond

root      1493  2216  0 07:40 pts/0    00:00:00 grep --colour=auto crond

[root@sulinux ~]#

 

 

 

 

 

이번 예는 시그널의 해당번호(9)를 사용한 예로서 다음 예와 같이 번호 대신 시그널명을 사용하여 프로세스를 종료할 수도 있다.

 

 

 

 

 

이번 예는 바로 앞의 예에서 사용했던 시그널번호 대신, 시그널명을 이용하여 crond를 종료한 예이다.

 

 

 

 아래의 예에서 먼저 ps crond의 실행확인과 PID를 확인하였다.

 

 

 

 확인결과 PID 3861번임을 알 수 있다.

 

 

 

 따라서 crond의 실행을 종료시키기 위하여 “kill -SIGKILL 1504”이란 명령어를 실행하였다.

 

 

 

 그리고 종료된 crond를 확인하기 위하여 다시 ps명령어를 사용한 것이다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep crond

root      1504     1  0 07:41 ?        00:00:00 crond

root      1507  2216  0 07:41 pts/0    00:00:00 grep --colour=auto crond

[root@sulinux ~]#

[root@sulinux ~]#kill -SIGKILL 1504

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep crond

root      1509  2216  0 07:41 pts/0    00:00:00 grep --colour=auto crond

[root@sulinux ~]#

 

 

 

 

이번 예는 바로 앞의 예와 동일한 것으로 시그널번호 대신 시그널명을 이용한 것이다.

 

 

 

 따라서 kill명령어로는 시그널번호를 사용할 수도 있고 시그널명을 사용할 수도 있음을 알 수 있다.

 

 

 

 

 

좀 더 다양한 kill 사용법들을 예로 들어보자. 아래의 예는 현재 실행중인 예약작업을 실행하도록 하는 atd라는 데몬에 대한 예이다.

 

 

 

 , atd데몬에게 시그널번호 1, HUP라는 시그널을 보내서 프로세스를 재시작하도록 하였다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep atd

root      1519     1  0 07:43 ?        00:00:00 /usr/sbin/atd

root      1522  2216  0 07:43 pts/0    00:00:00 grep --colour=auto atd

[root@sulinux ~]#

[root@sulinux ~]#kill -HUP 1519

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep atd

root      1519     1  0 07:43 ?        00:00:00 /usr/sbin/atd

root      1524  2216  0 07:43 pts/0    00:00:00 grep --colour=auto atd

[root@sulinux ~]#

 

 

 

 

ps로 현재 실행중인 atd를 확인한 결과 1519번임을 확인할 수 있다.

 

 

 

 그리고 “kill -HUP 1519”(또는 kill -SIGHUP 1519) atd 프로세스를 재시작하도록 하였다.

 

 

 

 kill명령어 실행 후에 ps  atd의 실행을 다시 확인한 결과 atd가 재시작되어 계속 실행되고 있음을 알 수가 있다.

 

 

 

 

 

다음 예는 HUP가 시그널번호 1번이므로 HUP(또는 SIGHUP)라는 시그널명 대신 시그널 번호를 이용한 예로서 위와 동일한 것이다.

 

 

 

 

 

[root@sulinux ~]#kill -1 1519

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep atd

root      1519     1  0 07:43 ?        00:00:00 /usr/sbin/atd

root      1526  2216  0 07:44 pts/0    00:00:00 grep --colour=auto atd

[root@sulinux ~]#

 

 

 

 

 

그리고 이번에는 kill명령어로 segmentation fault된 프로세스를 종료하는 예이다.

 

 

 

  리눅스시스템을 관리하거나 사용하다 보면 아주 가끔씩 “segmentation fault”라는 에러메시지를 확인할 수 있다.

 

 

 

 이 에러메시지는 메모리의 비정상적인 사용이 그 원인이며 특정프로세스가 사용가능 메모리주소 이외의 메모리주소를 사용하거나 허용되지 않는 값을 0으로 나누는 등의 비정상적인 연산의 결과로서 메모리의 사용에 문제가 발생하였음을 알리는 메시지이다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep vsftpd

root      1541     1  0 07:44 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      1544  2216  0 07:44 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

[root@sulinux ~]#kill -SIGSEGV 1541

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep vsftpd

root      1547  2216  0 07:44 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

 

 

 

 

이런 경우에 “segmentation fault”를 유발시킨 특정프로세스를 종료하기 위해 kill명령어로 시그널 11(SIGSEGV)을 보내서 종료하도록 해야한다.

 

 

 

 위의 예는 vsftpd에게 SIGSEGV, 즉 시그널번호 11번을 보내어 vsftpd를 종료시킨 것이다.

 

 

 

 위의 vsftpd“segmentation fault”를 유발한 것은 아니지만 설명의 편의를 위하여 예로 든 것이다.

 

 

 

 

 

다음 예는 SIGSEGV대신 시그널숫자 11번을 사용한 예로서 위와 동일하게 지정된 프로세스를 종료하도록 한 예이다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep vsftpd

root      1559     1  0 07:45 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      1562  2216  0 07:45 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

[root@sulinux ~]#kill -11 1559

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep vsftpd

root      1564  2216  0 07:45 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

 

 

 

 

 

이번에는 kill명령어로 특정프로세스에게 interrupt 시그널로 강제 중지하는 예이다.

 

 

 

 , 이번 예는 kill명령어로 특정프로세스에게 interrupt를 보내서 실행중이던 프로세스를 실행중지시키는 예이다.

 

 

 

  

 

다음 예에서 ps로 현재 실행중인 proftpd를 확인하였다.

 

 

 

 프로세스ID (PID)1576번임을 확인하고  “kill -SIGINT 1576”로 실행중인 vsftpd의 실행을 중지시켰다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep vsftpd

root      1576     1  0 07:46 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      1579  2216  0 07:46 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

[root@sulinux ~]#kill -SIGINT 1576

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep vsftpd

root      1581  2216  0 07:46 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

 

 

 

 

아래의 예는 SIGINT대신 시그널번호 2번을 사용하여 vsftpd를 중지하는 예이다.

 

 

 

 

 

[root@sulinux ~]#ps -ef | grep vsftpd

root      1591     1  0 07:47 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      1594  2216  0 07:47 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

[root@sulinux ~]#kill -2 1591

[root@sulinux ~]#

[root@sulinux ~]#ps -ef | grep vsftpd

root      1596  2216  0 07:47 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

 

 

 

 

 

이상과 같이 kill을 이용하여 특정프로세스에 대하여 원하는 시그널을 보내서 관리할 수 있다는 것을 알았다.

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  117 명