특정프로세스 확인과 동시에 죽이기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,464 조회
- 0 추천
- 목록
본문
특정프로세스 확인과 동시에 죽이기
시스템관리를 하다보면 프로세스관리를 해야 한다.
프로세스관리라 함은 특정프로세스가 실행되어 있는가를 확인하는 것에서부터 출발하여 특정프로세스를 죽이는 것,
특정프로세스가 사용하고 있는 시스템자원들(파일, 메모리, 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라는 이름이 들어가 있는 모든 프로세스는 자동적으로 죽이게 된다.
관련자료
-
이전
-
다음