2014-05-10 79 views
-1

如果PID(進程標識符)正在運行或不運行,我必須創建一個Shell腳本來檢查每個X秒。它必須與此終端命令來運行:Shell腳本在PID正在運行時每隔X秒檢查一次

$腳本[PID] [秒]

我寫了這一點,但它不工作:

#!/bin/bash 

read -a PID 
read -a SECONDS 

while(true) 

    if [kill -s 0 $PID] 
     then 
      echo "PID $PID is running" 
     exit 0; 
    else 
      echo "PID $PID is not running" 

sleep $SECONDS 

有人可以告訴我問題出在哪裏?

+3

請搜索的while循環的例子,如果在bash條件下,還有數以百萬計在那裏的PID。你的語法完全關閉。一切都很重要,特別是「代幣」之間的空間。 – Mat

+1

有許多服務可用於啓動和監視長期存在的程序。 – chepner

回答

2

watch,特別是它的-g選項,如果重複命令的輸出發生變化,則會使watch退出。

除此之外,馬特說什麼。你對Bash的掌握似乎......需要更多的培訓。

0

有一個更好的方法來檢查具有特定PID的進程是否正在運行,而不是使用kill。相反,請檢查/ proc中是否存在等價目錄。

#!/bin/bash 

if [ $# != 2 ]; then 
    echo "Usage: $(basename $0) <PID> <Seconds>" 
    exit 1 
fi 

while true; do 
    if [ -d /proc/$1 ]; then 
    echo "PID $1 is running" 
    else 
    echo "PID $1 is not running" 
    fi 

    sleep $2 
done 
0

pgrep工作得很好。它返回的過程相匹配的模式提供

pgrep $proc_name > /dev/null 
if [ $? -ne 0 ]; then 
    echo "$proc_name doesn't exist" 
fi