좀비 프로세스 상태 처리

좀비 프로세스 상태 처리

저는 스크립팅이 처음입니다. 프로세스가 종료되거나, 좀비가 되거나, 휴면 상태가 되는 등의 상황을 캡처하도록 되어 있는 프로세스 상태 모니터 스크립트를 작성 중입니다. 이것이 정말 좋은 스크립트인지는 잘 모르겠습니다. 더 나은 대안이 있으면 제안해 주세요.

내가 직면한 문제에 대해 아래 스크립트는 실행 중, 절전 중, 중지 등의 상태를 캡처합니다. 그러나 좀비 프로세스의 경우 명령에 대해 두 개의 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를 차례로 확인할 수도 있습니다.

관련 정보