Tasklist、Taskkill与筛选器
━━━━━━━━━━━━━━━━━━━━━━━━━━
Tasklist 与 Taskkill 是 xp 下很强大的命令工具。之所以强大,并不完全因为我们所熟悉的 Taskkill /f /im 或是 Taskkill /f /pid 的用法,而是因为它们的筛选器。我们先来看一下 Tasklist 与 Taskkill 的基本语法及使用:
Tasklist
显示运行在本地或远程计算机上的所有任务的应用程序和服务列表,带有过程 ID (PID)。
语法
tasklist[ .exe] [ /s computer] [ /u domain\user [ /p password]] [ /fo { TABLE| LIST| CSV}] [ /nh] [ /fi FilterName [ /fi FilterName2 [ ... ]]] [ /m [ ModuleName] | /svc | /v]
参数
-
/s
Computer
- 指定远程计算机名称或 IP 地址(不能使用反斜杠)。默认值是本地计算机。 /u Domain\ User
- 运行具有由 User 或 Domain\ User.指定用户的帐户权限命令。默认值是当前登录发布命令的计算机的用户权限。 /p Password
- 指定用户帐户的密码,该用户帐户在 /u 参数中指定。 /fo { TABLE| LIST| CSV}
- 指定输出所用的格式。有效值为 TABLE、 LIST 和 CSV。输出的默认格式为 TABLE。 /nh
- 取消输出结果中的列标题。当 /fo 参数设置为 TABLE 或 CSV 时有效。 /fi FilterName
-
指定该查询包括或不包括的过程类型。下表列出了有效的筛选器名称、运算符和值。
筛选器http://blog.sina.com.cn/hygxchxz 名称 运算符 值 状态 eq, ne RUNNING| NOT RESPONDING Imagename eq, ne 任何有效字符串。 PID eq, ne, gt, lt, ge, le 任何有效的正整数。 会话 eq, ne, gt, lt, ge, le 任何有效的会话数。 SessionName eq, ne 任何有效字符串。 CPUTime eq, ne, gt, lt, ge, le hh:mm:ss 格式的有效时间。
mm 参数和 ss 参数应在 0 到 59 之间,
hh 参数可以是任何一个有效的无符号的数值。Memusage eq, ne, gt, lt, ge, le 任何有效的整数。 用户名 eq, ne 任何有效的用户名 ([Domain\]User)。 服务 eq, ne 任何有效字符串。 Windowtitle eq, ne 任何有效字符串。 Modules eq, ne 任何有效字符串。
/m [
ModuleName]
- 指定显示每个过程的模块信息。指定模块时,将显示使用此模块的所有过程。没有指定模块时,将显示所有模块的所有过程。不能与 /svc 或 /v 参数一起使用。 /svc
- 无间断地列出每个过程的所有服务信息。当 /fo 参数设置为 TABLE 时有效。不能与 /m 或 /v 参数一起使用。 /v
- 指定显示在输出结果中的详细任务信息。不能与 /svc 或 /m 参数一起使用。 /?
- 在命令提示符显示帮助。
注释
- Tasklist 可以替代 TList 工具。
Taskkill
结束一个或多个任务或进程。可以根据进程 ID 或图像名来结束进程。
语法
taskkill [ /s Computer] [ /u Domain\User [ /p Password]]] [ /fi FilterName] [ /pid ProcessID]|[ /im ImageName] [/f][/t]
参数
-
/s
Computer
- 指定远程计算机名称或 IP 地址(不能使用反斜杠)。默认值是本地计算机。 /u Domain\ User
- 运行具有由 User 或 Domain\ User 指定用户的帐户权限命令。默认值是当前登录发布命令的计算机的用户权限。 /p Password
- 指定用户帐户的密码,该用户帐户在 /u 参数中指定。 /fi FilterName
-
指定将要终止或不终止的过程的类型。以下是有效的筛选器名称、运算符和值:
筛选器http://blog.sina.com.cn/hygxchxz 名称 运算符 值 Hostname eq, ne 任何有效字符串。 状态 eq, ne RUNNING| NOT RESPONDING Imagename eq, ne 任何有效字符串。 PID eg, ne, gt, lt, ge, le 任何有效的正整数。 Session eg, ne, gt, lt, ge, le 任何有效的会话数。 CPUTime eq, ne, gt, lt, ge, le hh:mm:ss 格式的有效时间。
mm 参数和 ss 参数应在 0 到 59 之间,
hh 参数可以是任何一个有效的无符号的数值。Memusage eg, ne, gt, lt, ge, le 任何有效的整数。 用户名 eq, ne 任何有效的用户名 ([Domain\]User)。 服务 eq, ne 任何有效字符串。 Windowtitle eq, ne 任何有效字符串。
/pid
ProcessID
- 指定将终止的过程的过程 ID。 /im ImageName
- 指定将终止的过程的图像名称。使用通配符 ( *) 指定所有图像名称。 /f
- 指定将强制终止的过程。对于远程过程可忽略此参数,所有远程过程都将被强制终止。 /t
- 指定终止与父进程一起的所有子进程,常被认为是“树终止”。 /?
- 在命令提示符显示帮助。
注释
- 只有与筛选器一起指定时,通配符 (*) 才能被接受。
- 无论是否指定 /f 参数,都会始终强制执行对远程过程的终止操作。
- 向 HOSTNAME 筛选器提供计算机名将导致关机和中止所有过程。
- 使用 tasklist 确定要终止的过程的过程 ID (PID)。
- Taskkill 替代了 Kill 工具。
筛选器 /fi
通过指定筛选进或筛选出的查询,以获取符合筛选器指定的标准的任务。
- 筛选器名称:
STATUS:运行状态,即某程序处于运行或无响应的状态。
IMAGENAME:图像名,即映像名称。
PID:PID 值
SESSION:会话编号#
SESSIONNAME:会话名
CPUTIME:CPU 时间
MEMUSAGE:内存使用量(KB)
USERNAME:用户名SERVICES:服务名
WINDOWTITLE:窗口标题
MODULES:DLL 名
Hostname:计算机全名中的主机名称部分 - 筛选器有效运算操作符:
eq:包含,等于。
ne:不包含,排除,不等于。
gt:大于
lt:小于
ge:大于或等于
le:小于或等于 - 筛选器有效值:
数值必须符合筛选器名的规则才有效!
范例
-
强行结束所有处于无响应状态的 Internet Explorer 进程:
taskkill /f /fi "STATUS eq NOT RESPONDING" /im iexplore.exe
-
使用批处理强行结束其他所有正在运行的批处理进程:
@echo off & set han=%RANDOM%
TITLE %han%
Taskkill /f /im cmd.exe /fi "Windowtitle ne %han%" >nul
pause -
强行结束所有内存使用量大于 10240Kb 的进程,但不包括 explorer.exe 和 svchost.exe 进程:
taskkill /f /fi "MEMUSAGE gt 10240" /fi "IMAGENAME
ne explorer.exe" /fi "IMAGENAME ne svchost.exe" /im * -
如果 Pid 为 1024 的某进程上挂了服务 hanye (即服务名为 hanye),就强行结束它:
taskkill /f /fi "SERVICES
eq hanye" /fi "pid eq 1024" 或:
taskkill /f /fi "SERVICES
eq hanye" /pid 1024 -
显示所有加载了模块 ntdll.dll 且 Pid 大于或等于 1000 的进程,同时显示其加载的其他 dll 模块,输出时,使用 CSV 格式,并不显示栏标头:
tasklist /m /fi "PID ge 1000" /fi "MODULES eq ntdll.dll" /fo csv /nh
Table 格式:仿表格格式,主要用于文本输出。
List 格式:列表格式,主要用于 Cmd 控制台窗口显示。
Csv 格式:字符串格式,主要用于 For /f 解析。
-
仅强行结束登陆号码为 34886634 和 30194447 的2008版 UC 进程,同时不结束他们打开的 UC 房间进程等子进程:
taskkill /f /fi "WINDOWTITLE
eq 30194447" /fi "WINDOWTITLE eq 34886634" /im uc.exe -
显示所有不是以当前帐户运行的 svchost 进程,并显示其所挂服务,输出时,使用 LIST 格式:
tasklist /svc /fi "USERNAME
ne %USERNAME%" /fi "IMAGENAME eq svchost.exe" /fo list 注释:
- List 格式不能使用 /nh 禁止输出栏标头是因为 List 格式中没有栏标头。
-
在 Username 中,需要使用格式 Domain\User 。Domain 为计算机所在域,User 为用户帐户。如果 User 使用当前帐户,Domain 可以省略。其他帐户,特别是 system 等,推荐使用域 NT AUTHORITY
-
/fi /im /pid 都可以多次使用。例如:
强行结束所有由当前帐户启动,并进程名前带 re 和带 de 的进程:
Taskkill /f /fi "username eq %username%" /FI "IMAGENAME eq re*" /FI "IMAGENAME eq de*"
强行结束 PID 从 3860 到 3862 的所有进程:
Taskkill /f /pid 3860 /pid 3861 /pid 3862
强行结束进程名分别是bk1.exe
bj2.exe bm3.exe 的所有进程: Taskkill /f /im
bk1.exe /im bj2.exe /im bm3.exe -
强行结束 PID 从 3860 到 3862 的所有进程:
for /l %i in (3860 1 3862) do @taskkill /f /pid %i >nul 2>nul
-
强行结束进程名分别是ba.exe
bb.exe bc.exe …… bz.exe 的所有进程: for %i in (a-z) do @taskkill /f /im b%i.exe >nul 2>nul
注释:
Taskkill 中不支持通配符 ? 的使用。
-
显示所有 CPU 时间小于 00:00:10 进程,并且由 system 帐户运行的详细信息:
tasklist /v /fi "USERNAME eq NT AUTHORITY\SYSTEM" /fi "CPUTIME
lt 00:00:10" 注释:
/v
参数时的详细信息比不使用时(默认包括:图像名、PID、会话名、会话#)多出 状态、用户名、CPU 时间、窗口标题 等。 -
显示所有
svchost.exe 进程的PID、会话名及会话编号: for /F "skip=3 tokens=2,3,4" %i in ('tasklist /fi "IMAGENAME eq svchost.exe"') do @echo %i %j %k
注释:
会话:两个交换数据的主机之间所建立的一种逻辑连接。对话一般用序列和回执发送可靠的数据。负载平衡 TCP/IP 通讯环境中,指向服务器的一组客户请求。这些请求可以被多个可能的并发 TCP 连接调用。服务器程序有时会维护请求之间的状态信息。要保留对服务状态的访问,“网络负载平衡”在进行负载平衡时需要将某个会话中的所有请求指向同一个群集主机。。
-
强行结束并重新启动外壳程序 explorer.exe :
taskkill /f /im explorer.exe & start explorer.exe
-
强行结束所有程序并关闭本地计算机:
taskkill /f /fi "hostname eq %COMPUTERNAME%"
-
查看进程使用的端口的批处理:
@echo off&color a&Title XP端口-进程查询-寒夜孤星【初学者】
setlocal enabledelayedexpansion&echo.&echo.
for /L %%k in (1 1 60) do set /p gu=*<nul
echo.&echo *本程序仅用于XP端口-进程查询(查看进程使用的端口) *
echo *寒夜孤星【初学者】 *
for /L %%k in (1 1 60) do set /p gu=*<nul
echo.&echo.&echo.&echo端口号 进程名称
ECHO TCP协议:
for /F "usebackq skip=4 tokens=2,5" %%i in (`"netstat -ano -p TCP"`) do (
call :Assoc %%i TCP %%j
echo !TCP_Port! !TCP_Proc_Name!
)
ECHO UDP协议:
for /F "usebackq skip=4 tokens=2,4" %%i in (`"netstat -ano -p UDP"`) do (
call :Assoc %%i UDP %%j
echo !UDP_Port! !UDP_Proc_Name!
)
echo 请按任意键退出本程序。
pause>nul
:Assoc
for /F "tokens=2 delims=:" %%e in ("%1") do (
set %2_Port=%%e
)
for /F "skip=2 usebackq delims=, tokens=1" %%a in (`"Tasklist /FI "PID eq %3" /FO CSV"`) do (
set %2_Proc_Name=%%~a
)
goto :eof