8

如何检查进程是否从批处理/cmd 文件运行?如果进程正在运行,如何自动停止进程?

就像一个 cmd 脚本一样,有人可以给我一些提示或帮助我制作那种脚本。

示例(伪代码):

If calc.exe is running                        
Stop calc.exe

我想要这样的东西:

@echo off

:x  
PATH=C:\Windows\System32\calc.exe  
If calc.exe is ON goto Process_Stop

:Process_Stop  
net stop calc.exe  
goto x
4

3 回答 3

16

首先,你有错误的命令来停止像 calc.exe 这样的进程。NET STOP 将停止服务,但不是正常的程序进程。你想要 TASKKILL 代替。

第二 - 如果您知道要杀死该进程(如果存在),那么为什么您认为必须在杀死它之前先检查它是否正在运行?无论如何,您都可以简单地尝试终止该进程。如果它不存在,则会生成错误,并且不会造成任何损害。如果它确实存在,那么它会被终止并显示成功消息。

taskkill /im calc.exe

如果您不想看到错误消息,请使用 .将 stderr 重定向到 nul 2>nul。如果您也不想看到成功消息,则使用 .将 stdout 重定向到 nul >nul

taskkill /im calc.exe >nul 2>nul

如果您想根据结果采取行动,那么您可以使用条件&&||运算符来判断成功和失败。

taskkill /im calc.exe >nul 2>nul && (
  echo calc.exe was killed
) || (
  echo no process was killed
)

或者您可以使用 ERRORLEVEL 来根据结果确定要做什么。

于 2013-07-13T04:16:31.530 回答
4

一个更具可读性和更简单的命令是这样的:

taskkill /F /FI "IMAGENAME eq calc.exe"

如果进程未运行,则此方法永远不会返回错误代码,如果进程未运行,/IM 开关返回错误。您还可以使用通配符,例如:

taskkill /F /FI "IMAGENAME eq calc*.exe"杀死名称中以 'calc' 开头并以 '.exe' 结尾的任何进程。

于 2015-11-04T17:20:24.550 回答
0

查看 tasklist 命令 - 此命令为您提供正在运行的任务和服务的列表。检查您感兴趣的任务是否正在使用正则表达式运行

然后使用 taskkill 命令杀死服务或任务。

于 2013-07-12T22:27:35.667 回答