有時控制台程式由于日志更改或其他原因需要定時重新開機,在Linux平台有很多工具可以實作,但是windows指令有限,實作起來有些麻煩。最近有個項目需要處理這種情況,搜尋了很久,并寫了一些代碼才解決。
程式為java編寫,要重新開機需要解決兩個問題--殺掉java程序和重新開機啟動程式。
這裡還有一個隐含的問題,如果殺掉程序後馬上啟動新的程式,有的時候會出現兩個後果交叉的情況,雖然程式是先調用了殺程序再啟動,但是啟動的程序又被殺掉了。
為了避免這種情況出現,在兩個操作之間需要延時一會。
這樣,問題就歸結為:
1 殺掉java程序;
2 延時;
3 啟動新的java程序;
基本确定的解決方案是:windows計劃任務+bat批處理+exe程式
第一步,殺掉java程序,windows本身隻有根據PID殺程序的方法,由于每次程式運作pid是動态的,是以不容易處理。網上有免費的工具pskill,可以根據程序名進行處理,格式:
pskill 程序名
第二步,延時,本來打算試用pause,但是他需要人為幹預。後來隻能自己想辦法了。用C++寫一個簡單的sleep程式,格式:
sleep 20000
延時20秒;
第三步,調用java程式。
第四步,添加計劃任務,調用job.bat。
注意,如果試用AT指令添加計劃任務,程式啟動後會在背景運作,如果你要看控制台輸出的資訊,需要在控制台裡添加計劃任務,并且調用java的時候試用start指令控制。
代碼:
REM job.bat
pskill java.exe
runjob.bat
rem runjob.bat
rem 延時放在這裡的原因就是讓java運作以前先等待前面的程式退出以後在執行。
start cmd /c java MyClass
<a href="http://www.sunhat.com.cn/soft/pskill.rar">http://www.sunhat.com.cn/soft/pskill.rar</a>