中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 关于进程 上一主题 | 下一主题
xg911335
初级用户





积分 134
发帖 50
注册 2006-3-28
状态 离线
『楼 主』:  关于进程

请问怎样判断进程是否存在?请给个列子。谢谢各位!

2006-9-23 02:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  XP下,可以用tasklist命令来列出当前进程。
tasklist|findstr /i "×××.exe">nul && echo "×××.exe"正在运行||echo ""×××.exe"没有运行




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-23 02:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xg911335
初级用户





积分 134
发帖 50
注册 2006-3-28
状态 离线
『第 3 楼』:  

谢谢namejm,麻烦你帮我解释一下|、&&、||这几个的含义。
@for /f %%i in ('tasklist ^|find /i "xxx.exe"') do (
        @if %%i =="" goto end
        taskkill /f /im %%i /T >unl
        echo %%i进程被结束
      )
:end
echo %%i没有发现进程
pause

执行完会显示
echo %i没有发现进程
echo %i没有发现进程
怎么会这样?

[ Last edited by xg911335 on 2006-9-23 at 03:46 ]

2006-9-23 03:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  |   管道符号。表示把前面命令的输出作为后面命令的输入。比如 echo abc|find "a" 表示把 echo 的输出结果abc字符串作为 find "a" 的搜索对象;
  && 连接符号。如果前面的语句执行成功,则执行后面的语句;
  || 连接符号。和 && 的意思正好相反,表示如果前面的语句执行失败,就执行后面的语句。

  你在『第 3 楼』的代码存在如下几个错误:

  1、如果成功关闭了 xxx.exe ,那么,echo %%i进程被结束 这一句执行之后,因为它之后再没有跳转语句,所以会继续执行 :end 标签段的内容;

  2、因为 %%i 是 for 语句中的变量,一旦for语句执行完毕之后,就不能再用 %%i 的格式来引用变量,而应换成百分号对中夹字符的%var%格式;

  另外,如果当前进程中没有你find的内容,for语句将没有任何输出,用空字符串来判断的方法好象不太成功,原因暂时还位找到。以下语句应该可以满足你的需求:
@echo off
tasklist|find /i "qq.exe">nul && (
    taskkill /f /T /im  "qq.exe">nul
    echo 进程 qq.exe 被结束
    ) || (   
    echo 没有发现进程 qq.exe
)
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-23 06:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xg911335
初级用户





积分 134
发帖 50
注册 2006-3-28
状态 离线
『第 5 楼』:  

非常感谢你的回答,你让我学到了很多东西.由衷的谢谢您,namejm!比如我想结束几个进程,但有的运行了有的没有运行,所以才想加入判断,有则结束,没有则跳过?用你4楼的代码结束一两还可以。不过结束的进程多了,代码也就多了。代码执行效率就差了。有没有什么更好的代码呢?

[ Last edited by xg911335 on 2006-9-23 at 09:26 ]

2006-9-23 09:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

回楼上,结束进程很快的啊,结束多进程加个 txt文件就是了,何来代码多?

2006-9-23 21:55
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 7 楼』:  



  Quote:
『第 4 楼』:  

....
另外,如果当前进程中没有你find的内容,for语句将没有任何输出,用空字符串来判断的方法好象不太成功,原因暂时还位找到...

如果没有find的内容,其实这段代码:

  Quote:
@for /f %%i in ('tasklist ^|find /i "xxx.exe"') do (
        @if %%i =="" goto end
        taskkill /f /im %%i /T >unl
        echo %%i进程被结束
      )

执行的情况应该为:

  Quote:
@for /f %%i in () do ...

既然没有循环条件,那么循环就一次也不会执行

  Quote:
『第 5 楼』:  

非常感谢你的回答,你让我学到了很多东西.由衷的谢谢您,namejm!比如我想结束几个进程,但有的运行了有的没有运行,所以才想加入判断,有则结束,没有则跳过?....


taskkill /f /T /im "exe1.exe" /im "exe2.exe" /im "exe3.exe" ... 2>nul
不需要你自己判断,taskkill能够应付这种情况。

2006-9-24 07:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mobo
初级用户





积分 73
发帖 30
注册 2006-9-18
状态 离线
『第 8 楼』:  ::查找进程中有无指定的运行程序.bat

::查找进程中有无指定的运行程序.bat
::------------BY MOBO
::查看进程:
wmic process where name='explorer.exe' get caption>out.txt
::终止进程:
wmic process where name='explorer.exe' call terminate
::用WMIC有很多功能,望大家深挖,共同交流.

2006-9-24 09:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xg911335
初级用户





积分 134
发帖 50
注册 2006-3-28
状态 离线
『第 9 楼』:  

谢谢各位朋友.已结!

2006-9-24 13:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 10 楼』:  


──────────────── 版务记录 ────────────────
执行:namejm
原标题:关于进程
说明:因标题过于模糊,不便于论坛的搜索和管理,请在三日内修改标题。
提示:修改标题请在当前帖的右下脚点
编辑修改完毕之后按 编辑帖子 即可。
处罚:因属论坛新人,暂时不予处罚;若三日之后尚未修改标题,将扣除4点积分,
      以示惩罚,并由版主强制修改标题。请点击
这里阅读论坛发帖规定,以避免在
      今后的讨论中违规发帖。
──────────────── 版务记录 ────────────────




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-22 08:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: