모든 타켓 프로세스 kill하기 (kill_proc.sh 스크립트)
- 최초 작성일: 2023년 8월 23일(수)
목차
[TOC]
코드
"kill_proc.sh" 31L, 704C
#!/bin/bash
# kjh [2023.08.23]
# run check proc
FILES=0
CTIME2=10
#COUNT=`ps -ef | grep "proc" | grep -v grep | wc -l`
KILL="proc"
COUNT=`ps -ef | grep -i $KILL | grep -v grep | wc -l`
GETpid=`ps -ef | grep -i $KILL | grep -v grep | gawk NR==$COUNT | gawk -F" " '{printf $2}'`
echo "start[$0 $KILL $COUNT $GETpid]"
if [ "$COUNT" == "$FILES" ]; then
echo "not running !!![$0]"
else
while [ $COUNT -ne $FILES ]
do
echo "kill !!! $GETpid"
kill -15 $GETpid
sleep 1
COUNT=`ps -ef | grep -i $KILL | grep -v grep | wc -l`
GETpid=`ps -ef | grep -i $KILL | grep -v grep | gawk NR==$COUNT | gawk -F" " '{printf $2}'`
echo "[$0 $KILL $COUNT $GETpid]"
done
fi
echo "end[$0]"
sleep 2
설명
1. Shebang
#!/bin/bash
- Shebang(
#!
): 스크립트 파일의 첫 줄에 위치하며 해당 스크립트를 어떤 인터프리터로 실행할지를 지정해줍니다. 여기서는 bash 쉘로 실행하라고 지정되어 있다.
2. 변수 초기화
FILES=0
CTIME2=10
FILES
: “proc” 프로세스가 하나도 실행 중이지 않을 때의 기대되는 개수를 나타내는 변수이다. 여기서는 0으로 초기화.CTIME2
: 초기 값 10이다.
3. 타겟 프로세스 정보 추출
KILL="proc"
COUNT=`ps -ef | grep -i $KILL | grep -v grep | wc -l`
GETpid=`ps -ef | grep -i $KILL | grep -v grep | gawk NR==$COUNT | gawk -F" " '{printf $2}'`
KILL
: 종료하고자 하는 프로세스의 이름을 저장하는 변수이다.COUNT
: 현재 시스템에서 실행 중인 “E6Client” 프로세스의 개수를 저장한다.GETpid
: “proc” 프로세스 중 마지막 프로세스의 PID(Process ID)를 저장한다.
4. 스크립트 시작 상태 출력
echo "start[$0 $KILL $COUNT $GETpid]"
- 스크립트가 시작될 때의 상태를 출력합니다. 출력되는 정보에는 스크립트의 경로와 이름(
$0
), 타겟 프로세스 이름($KILL
), 실행 중인 프로세스의 개수($COUNT
), 마지막 프로세스의 PID($GETpid
)가 포함된다.
5. 조건문을 통한 프로세스 종료
if [ "$COUNT" == "$FILES" ]; then
echo "not running !!![$0]"
- “E6Client” 프로세스의 개수(
COUNT
)가 0(FILES
)이면, 해당 프로세스가 실행 중이지 않다는 메시지와 함께 스크립트 이름($0
)을 출력한다.
else
while [ $COUNT -ne $FILES ]
do
echo "kill !!! $GETpid"
kill -15 $GETpid
sleep 1
COUNT=`ps -ef | grep -i $KILL | grep -v grep | wc -l`
GETpid=`ps -ef | grep -i $KILL | grep -v grep | gawk NR==$COUNT | gawk -F" " '{printf $2}'`
echo "[$0 $KILL $COUNT $GETpid]"
done
else
문 내부에 있는while
문은 “proc” 프로세스의 개수(COUNT
)가 0이 아닐 동안 반복된다.- 해당 프로세스의 PID(
GETpid
)를 출력하며, 해당 프로세스를kill -15
명령을 통해 종료시킨다. - 1초 동안 대기 후, 다시 “E6Client” 프로세스의 개수(
COUNT
)와 마지막 프로세스의 PID(GETpid
)를 갱신한다. - 현재 상태를 출력한다.
- 해당 프로세스의 PID(
fi
- 조건문
if
를 종료.
6. 스크립트 종료 전 대기
echo "end[$0]"
-
스크립트 종료를 알리는 메시지 출력. $0은 현재 스크립트의 이름을 나타낸다.
이 스크립트는 시스템에서 “proc” 프로세스가 실행 중인지 확인하고, 만약 실행 중이라면 해당 프로세스를 순차적으로 종료하는 역할을 한다.