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

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

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

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

 

 

 

 

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

 

 

 

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


특정프로세스가 사용하고 있는 시스템자원들(파일, 메모리, 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,056 명
  • 현재 강좌수 :  35,908 개
  • 현재 접속자 :  234 명