在前段时间看到有位兄台用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 密码。