我是靠谱客的博主 完美蓝天,最近开发中收集的这篇文章主要介绍利用tasklist和taskkill实现判断进程数按名称杀掉进程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题来源

由于很多浏览器经常出现进程不能正常退出的问题,如果一个一个关闭进程效率太低,因此,设想做一个批处理判断当同名进程数超过一定数量时,批量关闭进程。
当然这里只考虑一次性批量关闭进程的问题,不考虑实时监控。

批处理

@echo off
set exe=firefox.exe
set /a num =5
for /f %%i in ('tasklist^|find /c /i "%exe%"') do if %%i gtr %num% taskkill /f /im %exe%

解读

批处理的主要核心是tasklist命令和taskkill命令。
先使用tasklist |find /c /i "firefox.exe"得到firefox.exe进程的数量。

C:UsersAdministrator>tasklist |find /c /i
"firefox.exe"
6

然后判断进程数量是否大于我们指定的数量,大于则执行命令taskkill /f /im "firefox.exe"

tasklist命令

TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述:
该工具显示在本地或远程机器上当前运行的进程列表。

参数列表:
/S system 指定连接到的远程系统。

/U [domain]user 指定应该在哪个用户上下文执行这个命令。

/P [password] 为提供的用户上下文指定密码。如果省略,则
提示输入。

/M [module] 列出当前使用所给 exe/dll 名称的所有任务。
如果没有指定模块名称,显示所有加载的模块。

/SVC 显示每个进程中主持的服务。

/APPS 显示 Microsoft Store 应用及其关联的进程。

/V 显示详细任务信息。

/FI filter 显示一系列符合筛选器
指定条件的任务。

/FO format 指定输出格式。
有效值: “TABLE”、“LIST”、“CSV”。

/NH 指定列标题不应该
在输出中显示。
只对 “TABLE” 和 “CSV” 格式有效。

/? 显示此帮助消息。

筛选器:
筛选器名称 有效运算符 有效值
----------- --------------- --------------------------
STATUS eq, ne RUNNING | SUSPENDED
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
SESSIONNAME eq, ne 会话名称
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 小时,
mm - 分钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位)
USERNAME eq, ne 用户名,格式为
[域]用户
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
模块 eq, ne DLL 名称

注意: 当查询远程计算机时,不支持 “WINDOWTITLE” 和 “STATUS”
筛选器。

Examples:
TASKLIST
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI “STATUS eq RUNNING”
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域用户名 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI “USERNAME ne NT AUTHORITYSYSTEM” /FI “STATUS eq running”

taskkill命令

`TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]`
描述:
使用该工具按照进程 ID (PID) 或映像名称终止任务。
参数列表:
/S
system
指定要连接的远程系统。
/U
[domain]user
指定应该在哪个用户上下文执行这个命令。
/P
[password]
为提供的用户上下文指定密码。如果忽略,提示
输入。
/FI
filter
应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
/PID
processid
指定要终止的进程的 PID。
使用 TaskList 取得 PID。
/IM
imagename
指定要终止的进程的映像名称。通配符 '*'可用来
指定所有任务或映像名称。
/T
终止指定的进程和由它启用的子进程。
/F
指定强制终止进程。
/?
显示帮助消息。
筛选器:
筛选器名
有效运算符
有效值
-----------
---------------
-------------------------
STATUS
eq, ne
RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME
eq, ne
映像名称
PID
eq, ne, gt, lt, ge, le
PID 值
SESSION
eq, ne, gt, lt, ge, le
会话编号。
CPUTIME
eq, ne, gt, lt, ge, le
CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 分,ss - 秒
MEMUSAGE
eq, ne, gt, lt, ge, le
内存使用量,单位为 KB
USERNAME
eq, ne
用户名,格式为 [domain]user
MODULES
eq, ne
DLL 名称
SERVICES
eq, ne
服务名称
WINDOWTITLE
eq, ne
窗口标题
说明
----
1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
2) 远程进程总是要强行 (/F) 终止。
3) 当指定远程机器时,不支持 "WINDOWTITLE""STATUS" 筛选器。
例如:
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITYSYSTEM" /IM notepad.exe
TASKKILL /S system /U 域用户名 /FI "用户名 ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

最后

以上就是完美蓝天为你收集整理的利用tasklist和taskkill实现判断进程数按名称杀掉进程的全部内容,希望文章能够帮你解决利用tasklist和taskkill实现判断进程数按名称杀掉进程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部