相信大家都有這樣的需求,某程序(進程)在運行的時候可能掛掉,需要去監控該程序,並在它掛掉的時候重啟之,確保該程序能一直運行。比如土net就經常掛,需要監控程序去監控。Linux下面似乎有守護進程的概念,Windows下面其實也很簡單,dos批處理就可以搞定:-)
需要了解如下幾個命令,tasklist +find,ping。tasklist是列出所有進程,可以指定只列出某用戶的進程,用/FI參數過濾。find/C可以去tasklist的結果中查找指定進程名,並輸出個數。
還有個問題是如何設置每隔一段時間去檢測進程是否在運行,我用的是ping命令自帶的延遲參數-w,將IP地址設置成一個空地址,比如0.0.0.1,這樣該命令會一直ping,直到一定n*w毫秒后才返回(n和w分別是參數-n和-w指定的值)。
示例程序如下,紅色部分需要根據需求進行替換,enjoy it!
:RESTART
tasklist /FI "username eq bigtree" |find /C "java" >temp.txt
set /p num= < temp.txt
del /F temp.txt
echo %num%
if "%num%" == "0"
start /D"E:Userbigtreeprogramcomparison"pos
ping -n 10 -w 2000 0.0.0.1> temp.txt
del /F temp.txt
goto RESTART
ping -n 10 -w 2000 0.0.0.1> temp.txt
del /F temp.txt
goto RESTART
注意1:goto語句是將監控程序設置成死循環,哇咔咔。
注意2:可以用start /D pathprogram去異步調用program程序,也就是不等program指定完畢就執行下面的語句,因此可以設置固定間隔(n*w毫秒)去監測。
如果用callprogram則是同步調用,會等待program執行完畢,這樣延遲就用不着了。
注意2:可以用start /D pathprogram去異步調用program程序,也就是不等program指定完畢就執行下面的語句,因此可以設置固定間隔(n*w毫秒)去監測。
如果用callprogram則是同步調用,會等待program執行完畢,這樣延遲就用不着了。