守护进程

       在前段时间看到有位兄台用C#写了一个守护进程,挺好的,最近对批处理产生了很大兴趣,所以就试着用批处理写了一个守护进程批处理脚本。主要包括三个文件:ProcessCheck.bat、DeamonProcess.bat、Init.bat。分别具有以下职能:

       Init.bat

       (1)  设置需要守护程序的路径,将输入路径保存在根目录,生成processInfo.txt文件,文件格式为:path@name(d:\QQ.exe@QQ.exe) 。注意:如果路径中存在空格请使用""将其包括(当然也可以直接创建processInfo.txt文件,输入配置信息),如图所示:

代码
@echo off
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%==goto insert
      

      

       DeamonProcess.bat:

       (1)进程守护,读取文件processInfo.txt中配置,定时调用ProcessCheck.bat用于确认进程是否已经启动。可以对ProcessCheck.bat进行修改,提供其他核对条件:运行时间、内存占用量等。

      

代码
@echo off
echo 开始守护进程
echo.
:loop
for /"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



       ProcessCheck.bat:

       (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

代码
@echo off
wmic process where 
"commandline like '%%%1%%' and name!='wmic.exe'" get name /value|find /"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 密码。

/Files/WGZ_Home/守护进程.rar

    

      

       

       


原文地址:https://www.cnblogs.com/WGZ_Home/p/1958437.html