中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何让批处理不断扫描进程,并结束指定进程
作者:
标题: 如何让批处理不断扫描进程,并结束指定进程 上一主题 | 下一主题
xjzhf4
新手上路





积分 12
发帖 5
注册 2008-1-21
状态 离线
『楼 主』:  如何让批处理不断扫描进程,并结束指定进程

请各位高手帮我写一个批处理,可以一直扫描进程,如发现有dwwin.exe进程,则立即结束它,谢谢,另外这个批处理要和下面这个批处理文件配合使用,我发出来大家看下。下面这个批处理是保证DprClient.exe一直运行的,但DprClient.exe不能和dwwin.exe同时运行。最好能隔五分种扫描一次,先谢谢各位了。

@echo off
set app_name=DprClient.exe

set app_path=D:\asde\bb
set proc_name=%app_name%

set reboot=0
set rdelay=300
set call_delay=120
set loop_timeout=60
set /a _m=2

set fullname=%app_path%\%app_name%
set tmpvar=%_m%
set /a _m=%_m%+1
set /a count=0
set /a tmpvar1=0

:loop
cls
echo .........................................
echo 延时守护脚本(WinXP)
echo .........................................
echo 可实现延时启动、看护、重启系统
echo 纯脚本运行不需借助第三方工具
echo 请将本脚本放入 Windows 启动组自动运行
echo.
echo 设定参数列表
echo 被看护对象:%app_name%
echo 对象路径:%app_path%
echo 进程名称:%proc_name%
echo 检查周期:%loop_timeout% 秒        呼叫延时:%call_delay% 秒
echo 重启系统延时:%rdelay% 秒
echo 重启前被看护程序死亡次数:%tmpvar% 次
echo .........................................
echo.
if not exist "%fullname%" goto nofile
goto begin

:nofile
echo 找不到文件 %fullname%
echo 请检查脚本
echo 脚本中止
goto end

:begin
echo 查找进程 %proc_name%
(tasklist /nh | findstr /i "%proc_name%") || (goto callit)
echo 程序已运行
echo 被看护对象已经死亡 %tmpvar1% 次
goto continue

:callit
echo 进程未找到
set /a count=%count%+1
set /a tmpvar1=%count%-1
echo 被看护对象已经死亡 %tmpvar1% 次
if %count% EQU %_m% goto reboot
echo 延时 %call_delay% 秒启动
ping -n %call_delay% localhost > nul
start "" /D"%app_path%" "%app_name%"
goto continue

:continue
echo.
echo 等待 %loop_timeout% 秒重新看护
ping -n %loop_timeout% localhost > nul
goto loop

:reboot
echo 按规则将在 %rdelay% 秒之后重启
echo.
shutdown /r /t %rdelay% /c "被看护程序死亡 %tmpvar% 次,按规则将在 %rdelay% 秒之后重启"
:choice
set /P choice=要中止重启动,输入Y(不分大小写)并回车:
if /I "%choice%" NEQ "Y" goto choice
:stop
shutdown /a
echo 重启已经中止
goto end

:end
echo 按任一键退出守护脚本
pause>nul

[ Last edited by xjzhf4 on 2008-1-21 at 06:07 PM ]

2008-1-21 18:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xjzhf4
新手上路





积分 12
发帖 5
注册 2008-1-21
状态 离线
『第 2 楼』:  

咋还没有帮我呀,自己顶个先。。

2008-1-21 19:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 3 楼』:  

你哪程序看的 我头晕.
很基本,太基本:
:loop
ping/n 5 127.1>nul
tskill dwwin
goto loop
[ Last edited by plp626 on 2008-1-21 at 09:43 PM ]

2008-1-21 21:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhu6225103
初级用户





积分 36
发帖 15
注册 2008-1-7
状态 离线
『第 4 楼』:  

感觉楼主的那个P全是废话比较多有用的没几句

2008-1-22 01:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dato
高级用户




积分 916
发帖 377
注册 2004-3-8
状态 离线
『第 5 楼』:  

你用"进程"做关键词搜索一下吧,似乎只有注册表的映象截止方式才能实现你的要求

想用纯批的方法实现即时监测,汗那CPU资源占用就厉害了,这种只有用高级语言才好实现



http://dato.ys168.com
google search bot
http://dato.minidns.net/
2008-1-22 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
regvip2008
初级用户





积分 187
发帖 87
注册 2007-10-23
状态 离线
『第 6 楼』:  

楼上说得非常有道理!

2008-1-23 10:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:  

5秒提示方式
On Error Resume Next
strComputer = "."
arrTargetProcs = Array("calc.exe")

set objShell = CreateObject ("Wscript.Shell")
Set SINK = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
objWMIService.ExecNotificationQueryAsync SINK, _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process'"

Do
   WScript.Sleep 1000
Loop

Sub SINK_OnObjectReady(objLatestEvent, objAsyncContext)
For Each strTargetProc In arrTargetProcs
  If LCase(objLatestEvent.TargetInstance.Name) = LCase(strTargetProc) Then
    ProcessName=objLatestEvent.TargetInstance.Name
    objShell.Popup  Now & " 发现进程: " & ProcessName, 5, "提示信息"
    intReturn = objLatestEvent.TargetInstance.Terminate
    If intReturn = 0 Then
      objShell.Popup  Now & " 终止进程: " & ProcessName & " 成功", 5, "提示信息"
    Else
      objShell.Popup  Now & " 终止进程: " & ProcessName & " 失败", 5, "提示信息"
    End If
  End If
Next
End Sub
宁静日志方式(D:\kill.log)
On Error Resume Next
strComputer = "."
arrTargetProcs = Array("calc.exe")

set objShell = CreateObject ("Wscript.Shell")
set fso=Wscript.CreateObject("Scripting.FileSystemObject")
set file=fso.OpenTextFile("D:\kill.log",2,True)
Set SINK = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
objWMIService.ExecNotificationQueryAsync SINK, _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
"WHERE TargetInstance ISA 'Win32_Process'"

Do
   WScript.Sleep 1000
Loop

Sub SINK_OnObjectReady(objLatestEvent, objAsyncContext)
For Each strTargetProc In arrTargetProcs
  If LCase(objLatestEvent.TargetInstance.Name) = LCase(strTargetProc) Then
    ProcessName=objLatestEvent.TargetInstance.Name
    file.Writeline  Now & " 发现进程: " & ProcessName
    intReturn = objLatestEvent.TargetInstance.Terminate
    If intReturn = 0 Then
      file.Writeline  Now & " 终止进程: " & ProcessName & " 成功"
    Else
      file.Writeline  Now & " 终止进程: " & ProcessName & " 失败"
    End If
  End If
Next
End Sub


  Quote:
arrTargetProcs = Array("calc.exe")把calc.exe改为自己的程序名





第一高手    第二高手

2008-1-23 11:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: