Linux
處理殭屍程序狀態
我是腳本新手。我正在編寫一個程序狀態監視器腳本,它應該在程序被殺死、殭屍或睡眠等時擷取。我不確定這是否真的是一個好的腳本,如果有更好的替代方案,請建議。
對於我面臨的問題,下面的腳本可以擷取執行、睡眠、停止等狀態。但是對於殭屍程序,我們看到命令的兩個 pid
pidof zombie
。這被視為錯誤並且腳本沒有擷取該狀態。誰能建議如何捕捉程序的殭屍狀態。
順便說一句,我創建了一個殭屍程序,它的狀態可以在 shell 上看到一段時間。
#!/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(睡眠)
程序:process_1 與 pid 12668 處於狀態 狀態:S(睡眠)
檢查殭屍
其 pid 為 12818 12817 ./process_monitor.sh:第 13 行:[:12818:一元預計運營商
檢查 process_1
它的 pid 是 12668
狀態:R(執行)
程序:process_1 與 pid 12668 處於狀態狀態:R(執行)
檢查殭屍
它的 pid 是 12818 12817 ./process_monitor.sh:第 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>
這與殭屍狀態無關,而是與
pidof
返回執行命名程序的所有程序的 pid 的事實有關。zombie
您的程序的子程序也稱為zombie
,因此會列印兩個 pid。
pidof
有一個選項-s
告訴它只返回一個 pid。或者,您可以列舉返回的 pid 並依次檢查每個。