在前段时间看到有位兄台用C#写了一个守护进程,挺好的,最近对批处理产生了很大兴趣,所以就试着用批处理写了一个守护进程批处理脚本。主要包括三个文件:ProcessCheck.bat、DeamonProcess.bat、Init.bat。分别具有以下职能:
Init.bat
(1) 设置需要守护程序的路径,将输入路径保存在根目录,生成processInfo.txt文件,文件格式为:path@name(d:\QQ.exe@QQ.exe) 。注意:如果路径中存在空格请使用""将其包括(当然也可以直接创建processInfo.txt文件,输入配置信息),如图所示:



set dir = " %~dp0processInfo.txt "
cd . > " %dir% "
echo 输入守护程序路径:
:insert
echo .
set / p val =
FOR %%i IN ( %val% ) DO SET FN = %%~nxi
ECHO %val%@%FN% >> " %dir% "
echo .
set / p check = 是否继续输入【Y / N】
if %check% == Y goto insert
DeamonProcess.bat:
(1)进程守护,读取文件processInfo.txt中配置,定时调用ProcessCheck.bat用于确认进程是否已经启动。可以对ProcessCheck.bat进行修改,提供其他核对条件:运行时间、内存占用量等。


echo 开始守护进程
echo .
:loop
for / f " delims=@ tokens=1* " %%i in ( 'findstr . * " %~dp0processInfo.txt " ' ) do (
call ProcessCheck . bat %%j %%i
echo .
)
:: 暂停60秒
ping -n 60 127.0 . 0.1 > nul
goto loop
(1)核对程序是否已经运行,若未运行,将其启动 ,否则跳过。如上所述,可以修改文件ProcessCheck.bat、Init.bat增加核对条件,这里只实现了最简单的核对条件(是否已运行);通过WMIC PROCESS进行核对,其包括很多参数,根据需要进行选取(WMIC PROCESS GET /?),关于WMIC的一些参考信息:
http://msdn.microsoft.com/en-us/library/aa394606%28v=VS.85%29.aspx
http://blogold.chinaunix.net/u3/94687/showart_2045762.html


wmic process where " commandline like '%%%1%%' and name!='wmic.exe' " get name / value| find / I " name " > nul
If ErrorLevel 1 goto processstart
IF ErrorLevel 0 goto running
:processstart
echo 消息:% date %% time % 启动程序 %1
start "" %2
goto end
:running
echo 消息:% date %% time % 正在运行 %1
:end
扩展:
可以使用schtasks将DeamonProcess.bat注册为当系统启动时自动运行:schtasks /create /tn DeamonProcess /tr "E:\守护进程\deamonProcess.bat" /sc onstart /u 用户名 /p 密码。