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

동종류 프로세스를 죽이기 위한 killall의 다양한 사용법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

동종류 프로세스를 죽이기 위한 killall의 다양한 사용법

 

 

 

 

 killall명령어로 프로세스를 종료할 때에 차례대로 종료확인을 하는 방법이다.

 

 

 

  차례대로 확인하도록 하기 위해서는 -i옵션(interactive)을 사용하면 된다.

 

 

 

  먼저 ps로 현재 실행중인 프로세스를 확인하였다.

 

 

 

  그런다음 "killall -i vsftpd"라는 명령어로 모두 종료하도록 실행하였다.

 

 

 

 그리고 -i옵션에 의해 종료되는 프로세스를 확인하여 "y"를 입력하였을 때에만 종료되도록 하였다.

 

 

 

 

 

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

root      1611     1  0 07:48 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      1614  2216  0 07:48 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~]#

[root@sulinux ~]#killall -i vsftpd

Kill vsftpd(1611) ? (y/N) y

[root@sulinux ~]#

 

 

 

 

즉 위의 예에서는 killall명령어를 이용하여 vsftpd프로세스를 모두 종료하면서 vsftpd프로세스들의 종료여부를 확인하는 예이다.

 

 

 

 , “Kill vsftpd(4830) ? (y/N)”의 질문에 “y”라고 하면 해당 vsftpd가 종료되고 “n”이라고 입력하면 종료되지 않았다.

 

 

 

 위의 예는 이와같이 vsftpd의 종료여부확인에서 모두 “y”를 입력하였기 때문에 vsftpd프로세스가 종료된 것이다.

 

 

 

 

 

이번에는 지정된 프로세스에 보내진 시그널들이 정상적으로 보내졌는가를 확인해 주는 killall의 예이다.

 

 

 

  시그널이 보내졌는가를 확인하기 위해서는 killall실행시 -v옵션(verbose)을 주면된다.

 

 

 

 

 

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

root      1622     1  1 07:49 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1623  1622  0 07:49 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1624  1622  0 07:49 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1625  1622  0 07:49 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1626  1622  0 07:49 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1627  1622  0 07:49 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

root      1631  2216  0 07:49 pts/0    00:00:00 grep --colour=auto httpd

[root@sulinux ~]#

[root@sulinux ~]#killall -v httpd

Killed httpd(1622) with signal 15

Killed httpd(1623) with signal 15

Killed httpd(1624) with signal 15

Killed httpd(1625) with signal 15

Killed httpd(1626) with signal 15

Killed httpd(1627) with signal 15

[root@sulinux ~]#

 

 

 

 

먼저 httpd프로세스들이 실행중임을 ps로 확인하였다.

 

 

 

  그런 다음 "killall -v httpd"로 프로세스들이 종료되는 것을 확인하도록 하였다.

 

 

 

 , 위의 예에서는 killall명령어로 httpd를 종료하면서 killall의 수행결과를 보여주고 있는 예이다.

 

 

 

 

 

 

그리고 이번에는 killall 실행으로 지정한 프로세스 완전히 종료될 때까지 지속적으로 종료시도하는 예이다.

 

 

 

 서버부하가 있거나 너무 많은 프로세스들이 실행되고 있을 경우에는 killall명령어를 실행하여도 빠른 시간 내에 종료되지 않는 경우가 있다.

 

 

 

 심지어 모두 종료되지도 않았는데 killall자체가 종료 되어버리는 경우도 있다.

 

 

 

 

 

이런 경우에 지정된 모든 프로세들이 완전히 종료될 때까지 종료시도를 계속하는 옵션이 -w이다.

 

 

 

 아래와 같이 killall 실행시에 -w옵션을 사용하시면 지정된 프로세스가 모두 종료될 때까지 killall은 종료하지 않고 지정한 프로세스가 종료될 때까지 계속 종료시도를 한다.

 

 

 

 

 

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

root      1640     1  1 07:51 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1641  1640  0 07:51 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1642  1640  0 07:51 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1643  1640  0 07:51 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1644  1640  0 07:51 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1645  1640  0 07:51 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

root      1647  2216  0 07:51 pts/0    00:00:00 grep --colour=auto httpd

[root@sulinux ~]#

[root@sulinux ~]#killall -w httpd

[root@sulinux ~]#

 

 

 

 

위의 예에서 killall명령어에 -w옵션을 사용하여 httpd가 완전히 종료될 때까지 종료시도하는 예를 보았다.

 

 

 

 

 

이번에는 killall로 특정프로세스를 재시작하는 시그널을 보내는 예이다.

 

 

 

  killall 실행시에 HUP(프로세스 재시작 시그널) 시그널을 보내면 지정된 프로세스가 종료하지 않고 재시작을 수행한다.

 

 

 

 다음은 httpd를 종료하지 않고 재시작하기 위한 시그널인 HUP를 보낸 예이다.

 

 

 

 

 

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

root      1652     1  4 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1653  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1654  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1655  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1656  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1657  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

root      1659  2216  0 07:52 pts/0    00:00:00 grep --colour=auto httpd

[root@sulinux ~]#

[root@sulinux ~]#killall -HUP httpd

[root@sulinux ~]#

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

root      1652     1  2 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1661  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1662  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1663  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1664  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1665  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

root      1667  2216  0 07:52 pts/0    00:00:00 grep --colour=auto httpd

[root@sulinux ~]#

 

 

 

 

 

 "killall -HUP httpd"를 실행하여 httpd프로세스들이 모두 재시작하도록 하였다.

 

 

 

 재시작된 후의 PID번호를 killall수행전의 PID번호와 비교해보기 바란다.

 

 

 

 자식프로세스들의 PID번호가 모두 새롭게 지정된 것을 확인하실 수 있을 것이다.

 

 

 

 

 

이번에는 killall로 특정프로세스들에게 종료시그널 번호(-9)를 보내는 예이다.

 

 

 

  앞에서 killall에서는 kill에서 사용 가능한 모든 시그널을 사용할 수 있다고 설명하였다.

 

 

 

  따라서 다음 예와 같이 killall실행시에 -9 시그널을 보내면 지정된 프로세스에 -9시그널을 모두 보내게 된다.

 

 

 

  -9는 프로세스를 종료하는 시그널이다.

 

 

 

  따라서 지정된 프로세스는 모두 종료된다.

 

 

 

 

 

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

root      1652     1  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1661  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1662  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1663  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1664  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

daemon    1665  1652  0 07:52 ?        00:00:00 /usr/local/apache_2.2.10/bin/httpd -k start

root      1674  2216  0 07:53 pts/0    00:00:00 grep --colour=auto httpd

[root@sulinux ~]#

[root@sulinux ~]#killall -9 httpd

[root@sulinux ~]#

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

root      1677  2216  0 07:53 pts/0    00:00:00 grep --colour=auto httpd

[root@sulinux ~]#

 

 

 

 

, 위의 예에서는 killall명령어로 -9라는 종료시그널을 httpd에 보내어 httpd프로세스를 모두 종료하는 예를 보았다.

 

 

 

 

 

 

 

관련자료

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

공지사항


뉴스광장


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