개발/Bash, Shell Script
pid가 동작하는 중인지 확인하는 방법
AimB
2021. 11. 18. 17:58
FIND=`ssh -n -p $port $ip find ${PATH} -name "*.[파일형식]"`
if [ -n "${FIND}" ]; then
PREV_PID=`ssh -n -p $port $usr@$ip cat ${FIND}` # pid #74535
CHECK_STAT=`ssh -n -p $port $usr@$ip ps -f ${PREV_PID} | awk 'NR == 2 {print $7}'` # bash: /proc/74535: 파일이 존재하고 디렉토리인 경우
echo "${target} CHECK_STAT : "${CHECK_STAT}""
# pid 문자열이 존재하고 pid의 STAT이 D, T, X, Z 로 시작하지 않고 STAT이 공백이 아니면
# STAT : D -> 입출력 대기로 깨울 수 없는 수면 상태
# STAT : T -> 일시 정지
# STAT : X -> 사망
# STAT : Z -> 프로세스 작동이 잘못되어 죽은 좀비 상태
if [[ -n "${PREV_PID}" ]] && [[ "${CHECK_STAT}" != "D"* && "${CHECK_STAT}" != "T"* && "${CHECK_STAT}" != "X"* && "${CHECK_STAT}" != "Z"* ]] && [[ -n "${CHECK_STAT}" ]]; then
echo "process exists"
else
send_message
fi
ps -f $pid 의 STAT 부분에서 pid의 상태를 체크할 수 있다.
상태가
STAT : D -> 입출력 대기로 깨울 수 없는 수면 상태
STAT : T -> 일시 정지
STAT : X -> 사망
STAT : Z -> 프로세스 작동이 잘못되어 죽은 좀비 상태
가 아니라면 살아 있는 것으로 체크할 수 있다.
혹은 명령어에 pid파일을 남기는 것이 명시되어 있을 경우
$pid에 파일 경로를 담고 grep으로 해당 pid가 담긴 명령어가 실행 중인지 체크할 수 있다.
pids=`ssh -n -p $port $ip ps -aux | grep $pid | wc -l`
if [ $pids -gt 0 ]; then
echo "file exists"
else
send_message
fi