Tasklist 与 Taskkill 是 xp 下很强大的命令工具。之所以强大,并不完全因为我们所熟悉的 Taskkill/f /im 或是 Taskkill /f /pid 的用法,而是因为它们的筛选器。我们先来看一下 Tasklist 与Taskkill 的基本语法及使用:
Tasklist
显示运行在本地或远程计算机上的所有任务的应用程序和服务列表,带有过程 ID (PID)。
语法
参数
- /s Computer
- 指定远程计算机名称或 IP 地址(不能使用反斜杠)。默认值是本地计算机。
- /u DomainUser
- 运行具有由 User 或DomainUser.指定用户的帐户权限命令。默认值是当前登录发布命令的计算机的用户权限。
- /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 [ModuleNam e]
- 指定显示每个过程的模块信息。指定模块时,将显示使用此模块的所有过程。没有指定模块时,将显示所有模块的所有过程。不能与/svc 或 /v 参数一起使用。
/svc - 无间断地列出每个过程的所有服务信息。当 /fo 参数设置为 TABLE 时有效。不能与/m 或 /v 参数一起使用。
- /v
- 指定显示在输出结果中的详细任务信息。不能与 /svc 或 /m 参数一起使用。
- /?
- 在命令提示符显示帮助。
注释
Taskkill
结束一个或多个任务或进程。可以根据进程 ID 或图像名来结束进程。
语法
taskkill
参数
- /s Computer
- 指定远程计算机名称或 IP 地址(不能使用反斜杠)。默认值是本地计算机。
- /u DomainUser
- 运行具有由 User 或 DomainUser指定用户的帐户权限命令。默认值是当前登录发布命令的计算机的用户权限。
- /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
- 指定终止与父进程一起的所有子进程,常被认为是“树终止”。
- /?
- 在命令提示符显示帮助。
注释
筛选器 /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 NOTRESPONDING" /im iexplore.exe
使用批处理强行结束其他所有正在运行的批处理进程:
@echo off & sethan=%RANDOM%
TITLE %han%
Taskkill /f /im cmd.exe /fi "Windowtitle ne %han%">nul
pause强行结束所有内存使用量大于 10240Kb 的进程,但不包括 explorer.exe 和 svchost.exe进程:
taskkill /f /fi "MEMUSAGE gt10240" /fi "IMAGENAMEne explorer.exe" /fi"IMAGENAMEne svchost.exe"/im*
如果 Pid 为 1024 的某进程上挂了服务 hanye (即服务名为 hanye),就强行结束它:
taskkill /f /fi"SERVICESeq hanye" /fi "pid eq1024"
或:
taskkill /f /fi"SERVICESeq 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"WINDOWTITLEeq 30194447" /fi"WINDOWTITLEeq 34886634" /imuc.exe
显示所有不是以当前帐户运行的 svchost 进程,并显示其所挂服务,输出时,使用 LIST 格式:
tasklist /svc /fi"USERNAMEne %USERNAME%" /fi "IMAGENAMEeqsvchost.exe" /fo list
注释:
- List 格式不能使用 /nh 禁止输出栏标头是因为 List 格式中没有栏标头。
在 Username 中,需要使用格式 DomainUser 。Domain为计算机所在域,User 为用户帐户。如果 User 使用当前帐户,Domain可以省略。其他帐户,特别是 system 等,推荐使用域 NT AUTHORITY
/fi /im /pid 都可以多次使用。例如:
强行结束所有由当前帐户启动,并进程名前带 re 和带 de 的进程:
Taskkill /f /fi "username eq%username%" /FI "IMAGENAME eq re*" /FI "IMAGENAME eqde*"
强行结束 PID 从 3860 到 3862 的所有进程:
Taskkill /f /pid 3860 /pid 3861/pid 3862
强行结束进程名分别是bk1.exebj2.exebm3.exe的所有进程:
Taskkill /f/imbk1.exe /imbj2.exe/imbm3.exe
强行结束 PID 从 3860 到 3862 的所有进程:
for /l %i in (3860 1 3862) do@taskkill /f /pid %i >nul2>nul
强行结束进程名分别是ba.exebb.exebc.exe……bz.exe的所有进程:
for %i in (a-z) do @taskkill /f/im b%i.exe >nul2>nul
注释:
Taskkill 中不支持通配符 ? 的使用。
显示所有 CPU 时间小于 00:00:10 进程,并且由 system 帐户运行的详细信息:
tasklist /v /fi "USERNAME eq NTAUTHORITYSYSTEM" /fi "CPUTIMElt00: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&colora&Title XP端口-进程查询-寒夜孤星【初学者】
setlocalenabledelayedexpansion&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 -pTCP"`) 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 -pUDP"`) 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