저는 스크립팅이 처음입니다. 프로세스가 종료되거나, 좀비가 되거나, 휴면 상태가 되는 등의 상황을 캡처하도록 되어 있는 프로세스 상태 모니터 스크립트를 작성 중입니다. 이것이 정말 좋은 스크립트인지는 잘 모르겠습니다. 더 나은 대안이 있으면 제안해 주세요.
내가 직면한 문제에 대해 아래 스크립트는 실행 중, 절전 중, 중지 등의 상태를 캡처합니다. 그러나 좀비 프로세스의 경우 명령에 대해 두 개의 PID가 표시됩니다 pidof zombie
. 이는 오류로 간주되며 스크립트가 상태를 캡처할 수 없습니다.
누구든지 프로세스의 좀비 상태를 캡처하는 방법을 제안할 수 있습니까?
그건 그렇고, 나는 쉘에서 때때로 상태가 좀비로 간주되는 좀비 프로세스를 만들었습니다.
#!/bin/bash
do_start() {
# List of process names to be monitored for its termination/killing.
declare -a PROCESS_LIST
PROCESS_LIST=("process_1" "process_2" "zombie")
for process in "${PROCESS_LIST[@]}"; do
echo "checking for $process"
pid=$(pidof $process)
echo "its pid is $pid"
if [ $pid ]; then
pid_status=`head /proc/$pid/status | grep "State:*"`
echo $pid_status
if [[ "$pid_status" =~ .*"sleeping"*. ]] || [[ "$pid_status" =~ .*"stopped"*. ]] || [[ "$pid_status" =~ .*"running"*. ]]; then
echo "process:$process with pid $pid is having status $pid_status"
elif [[ "$pid_status" =~ .*"zombie"*. ]]; then
echo "process:$process with pid $pid is having status $pid_status"
fi
else
echo "pid not present" > /dev/null
fi
done
}
while :
do
do_start
sleep 2
done
산출:
process_1
의 pid가 12668인지 확인하십시오
. 상태: S(sleep)
프로세스: pid 12668 process_1의 상태 상태: S(sleep)
좀비의 pid가 12818 12817인지 확인하십시오.
./process_monitor.sh: line 13: [: 12818: 단항 연산자 예상
process_1
의 pid가 12668
상태인지 확인: R(실행 중)
프로세스: pid 12668 process_1의 상태 상태: R(실행 중)
좀비의 pid가 12818 12817인지 확인
./process_monitor.sh: line 13: [:12818: 단항 연산자 기대
$ ps ux 출력
xolo 12668 95.3 0.0 4164 360 pts/4 R 15:32 0:07 ./process_1
xolo 12817 0.0 0.0 4160 360 pts/4 S 15:32 0:00 ./zombie
xolo 12818 0.0 0.0 0 0 pts/4 Z 15:32 0:00 [zombie]<defunct>
답변1
이는 좀비 상태와 관련이 없으며 오히려 pidof
지정된 프로그램을 실행하는 모든 프로세스의 pid를 반환하는 것과 관련이 있습니다. 프로그램의 하위 프로세스 zombie
도 호출되므로 zombie
두 PID가 모두 인쇄됩니다.
pidof
-s
단지 pid를 반환하도록 지시하는 옵션이 있습니다 . 또는 반환된 PID를 열거하고 각 PID를 차례로 확인할 수도 있습니다.