Linux

處理殭屍程序狀態

  • June 24, 2021

我是腳本新手。我正在編寫一個程序狀態監視器腳本,它應該在程序被殺死、殭屍或睡眠等時擷取。我不確定這是否真的是一個好的腳本,如果有更好的替代方案,請建議。

對於我面臨的問題,下面的腳本可以擷取執行、睡眠、停止等狀態。但是對於殭屍程序,我們看到命令的兩個 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 並依次檢查每個。

引用自:https://unix.stackexchange.com/questions/655642