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

특정프로세스 확인과 동시에 죽이기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

특정프로세스 확인과 동시에 죽이기

 

 

 

 

시스템관리를 하다보면 프로세스관리를 해야 한다.

 

 

 

 프로세스관리라 함은 특정프로세스가 실행되어 있는가를 확인하는 것에서부터 출발하여 특정프로세스를 죽이는 것, 


특정프로세스가 사용하고 있는 시스템자원들(파일, 메모리, CPU등)의 량 확인, CPU를 많이 사용하는 프로세스는 어떤것인가?등과 같은 것이다.



 

 

 물론 필자는 프로세스관리에 대한 부분만을 별도로 설명하였다. 



단, 여기서는 시스템관리의 기초기술에 대하여 설명하고 있는 것이므로 특정프로세스의 실행을 확인하고 불필요한 프로세스를 죽이는 방법에 대해서만 간략하게 설명하기로 한다.

 

 

 

 

먼저, 특정프로세스를 확인하는 방법은 “ps -ef | grep 프로세스명”과 같이 확인할 수 있다.


 

 

 다음은 이에 대한 예로서 vsftpd라는 FTP 서버데몬의 실행여부를 ps로 확인하는 예이다.

 

 

 

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

root      2389     1  0 13:28 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      2392  2189  0 13:29 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~] #

 




위의 확인결과 vsftpd가 PID 2389번으로 실행되어 있음을 알 수 있다.

 

 이와 같은 방법으로특정프로세스의 실행여부를 확인할 수 있다.

 

 

 

그렇다면 특정프로세스가 시스템자원을 너무 많이 사용하여 속도가 느려지거나 일시적인 장애가 발생하는 경우가 있다.



 

 

 비정상적인 프로세스 발견시에 대부분 ps로 해당 프로세스의 PID를 확인한 다음 “kill -9 PID”와 같은 방법으로 특정프로세스를 죽여서 응급조치를 해야 한다.


 

 

 

 앞에서 확인했던 vsftpd를 죽이는 다음 예를 보도록 하자.



 

 

[root@sulinux ~] # kill -9 2389

[root@sulinux ~] #

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

root      2396  2189  0 13:31 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~] #

 




우리가 앞에서 확인했던 vsftpd프로세스의 PID번호가 2389번이기 때문에 “kill -9 2389”를 실행하여 vsftpd프로세스를 죽였다. 




그런 다음 ps로 확인한 결과 이미 죽었기 때문에 실행되지 않았음을 알 수 있다.

 

 

 

자, 방금 앞에서 확인한 방법이 특정프로세스를 확인하고 죽이는 가장 기본적인 방법이다.



 

 

 그런데 만약 다음 예와 같이 동종류의 많은 프로세스가 실행되어 있는 경우에 이들을 모두 죽이려면 어떻게 할까? 




물론 하나씩 kill로 죽이면 가능하다.


 

 

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

root      2409     1  0 13:33 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

nobody    2412  2409  0 13:33 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

sspark    2414  2412  0 13:33 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

nobody    2453  2409  0 13:34 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

sspark    2455  2453  0 13:34 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

nobody    2490  2409  0 13:34 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

sulinux   2492  2490  0 13:34 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      2494  2189  0 13:34 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~] #

 




위의 예와 같이 동종류의 vsftpd라는 프로세스로 실행된 여러 개의 프로세스가 있다고 한다면 모두 kill로 죽일 수도 있겠지만 한번에 죽이는 간편한 방법이 다음과 같이 몇가지 있다.

 

 

 

방법1 : killall “프로세스명”



방법2 : ps –ef | grep “프로세스명” | awk ‘{print $2}’ | xargs kill -9



 

물론 위의 방법외에도 몇가지 방법이 더 있기는 하지만 이는 뒤에서 배우기로 하고 위의 방법2가지에 대한 예를 직접 보도록 하자. 



먼저 방법1에 대한 예이다.

 

 

 

[root@sulinux ~] # killall vsftpd

[root@sulinux ~] #

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

root      2497  2189  0 13:36 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~] #



 

확인한 바와같이 vsftpd 프로세스를 한번의 명령으로 모두 죽여버렸다. 




그 결과를 ps로 확인하였지만 모두 죽었기 때문에 vsftpd프로세스는 확인되지 않는다. 이번에는 방법2로 이들을 모두 죽인 예이다.

 

 

 

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

root      2541     1  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

nobody    2544  2541  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

sspark    2546  2544  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

nobody    2548  2541  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

sspark    2550  2548  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

nobody    2552  2541  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

sulinux   2554  2552  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      2556  2189  0 13:38 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~] #

[root@sulinux ~] # ps -ef | grep vsftpd | awk '{print $2}' | xargs kill -9

kill 2558: No such process

[root@sulinux ~] #

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

root      2563  2189  0 13:38 pts/0    00:00:00 grep --colour=auto vsftpd

[root@sulinux ~] #

 




위의 결과를 보다시피 vsftpd라는 이름을 가진 프로세스들을 모두 한번에 죽여버렸다. 




방금예로든 방법2에 대해서 다음과 같이 부연설명을 하자면 다음과 같다.


 

 

awk ‘{print $2}’



ps의 결과중 두번째 인자가 PID를 의미하므로 각 프로세스들의 PID만을 넘겨 받는다.


 

 

xargs kill -9



그리고 xargs로 PID들을 하나씩 넘겨 받아서 kill명령어의 시그널 9번(signal 9번)인 종료를 실행한다.


 

 

 

 

 

결과적으로 vsftpd라는 이름이 들어가 있는 모든 프로세스는 자동적으로 죽이게 된다.

 

관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,534 명
  • 현재 강좌수 :  37,615 개
  • 현재 접속자 :  112 명