在上一篇博客文章应用排障记录(一)利用Python+CMD进行java应用的监控和重启里,在排障和操作的时候都用到了CMD命令,这也是Windows系统维护中不可避免的内容——CMD或PowerShell操作。
来看一下排障查看Java异常弹框所属应用并杀掉时用到的命令。
C:\Users\Administrator>tasklist /fi "WINDOWTITLE eq Java(TM) Platform SE binary"
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
WerFault.exe 1736 Console 1 14,764 K
WerFault.exe 16256 Console 1 14,724 K
C:\Users\Administrator>tasklist | findstr "WerFault"
WerFault.exe 1736 Console 1 14,764 K
WerFault.exe 16256 Console 1 14,724 K
C:\Users\Administrator>taskkill /f /im WerFault.exe
成功: 已终止进程 "WerFault.exe",其 PID 为 1736。
成功: 已终止进程 "WerFault.exe",其 PID 为 16256。
操作用到了两个命令tasklist和taskkill。
先看一下tasklist
C:\Users\Administrator>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 显示应用商店应用及其关联的进程。
/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 AUTHORITY\SYSTEM" /FI "STATUS eq running"
常用的功能有
1.查看本机进程,通常会与findstr
find
配合使用。
C:\Users\Administrator>tasklist | findstr "WerFault"
WerFault.exe 1736 Console 1 14,764 K
WerFault.exe 16256 Console 1 14,724 K
2.通过窗口名称查找对应应用
C:\Users\Administrator>tasklist /fi "WINDOWTITLE eq Java(TM) Platform SE binary"
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
WerFault.exe 1736 Console 1 14,764 K
WerFault.exe 16256 Console 1 14,724 K
3.查看调用DLL的进程
C:\Users\Administrator>tasklist /m sechost.dll
映像名称 PID 模块
========================= ======== ============================================
rdpclip.exe 6672 sechost.dll
RuntimeBroker.exe 6816 sechost.dll
sihost.exe 5304 sechost.dll
svchost.exe 4108 sechost.dll
taskhostw.exe 6344 sechost.dll
ChsIME.exe 7396 sechost.dll
explorer.exe 7548 sechost.dll
ShellExperienceHost.exe 5636 sechost.dll
SearchUI.exe 7732 sechost.dll
vmtoolsd.exe 10524 sechost.dll
chrome.exe 12560 sechost.dll
chrome.exe 12196 sechost.dll
4.官方help的举例其实都很好
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 AUTHORITY\SYSTEM" /FI "STATUS eq running"
====================================================
再看一下taskkill
C:\Users\Administrator>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 AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
和tasklist大同小异,就不多说了