自上篇之后,在windows中也会有类似的需求,而windows系统环境下并没有lsof这个指令。
因此转而使用netstat(显示协议统计信息和当前 TCP/IP 网络连接的工具)来查询。
在Windows中的netstat参数和作用不太一样需要特别注意。
直接在CMD中输入netstat ?
即可获得参数帮助:
NETSTAT [-a] [-b] [-e] [-f] [-i] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval] -a 显示所有连接和侦听端口。 -b 显示在创建每个连接或侦听端口时涉及的 可执行文件。在某些情况下,已知可执行文件托管 多个独立的组件,此时会 显示创建连接或侦听端口时 涉及的组件序列。在此情况下,可执行文件的 名称位于底部 [] 中,它调用的组件位于顶部, 直至达到 TCP/IP。注意,此选项 可能很耗时,并且可能因为你没有足够的 权限而失败。 -e 显示以太网统计信息。此选项可以与 -s 选项 结合使用。 -f 显示外部地址的完全限定 域名(FQDN)。 -i 显示 TCP 连接在当前状态所花费的时间。 -n 以数字形式显示地址和端口号。 -o 显示拥有的与每个连接关联的进程 ID。 -p proto 显示 proto 指定的协议的连接;proto 可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。 -q 显示所有连接、侦听端口和绑定的 非侦听 TCP 端口。绑定的非侦听端口 不一定与活动连接相关联。 -r 显示路由表。 -s 显示每个协议的统计信息。默认情况下, 显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息; -p 选项可用于指定默认的子网。 -t 显示当前连接卸载状态。 -x 显示 NetworkDirect 连接、侦听器和共享 终结点。 -y 显示所有连接的 TCP 连接模板。 无法与其他选项结合使用。 interval 重新显示选定的统计信息,各个显示间暂停的 间隔秒数。按 CTRL+C 停止重新显示 统计信息。如果省略,则 netstat 将打印当前的 配置信息一次。
在这里我主要用到ano三个参数。
命令返回值的最后一列即第五列就是对应的PID,比如这里的135端口所对应的进程号是1816。
如果需要指定查询对应的连接或者端口号就需要配合使用findstr指令。
比如我是用ssh客户端连接了192.168.3.42的22端口:
其中第二列代表本机ip以及本机占用的端口号,第三列代表和外部通信的对端ip以及对端端口号。最后一列就是PID。
想要关闭该进程则需要使用taskkill指令。
taskkill /F /PID 19636
同样,上面的方法是人工输入PID来结束进程,如果改为自动查找并结束则是:
for /f "tokens=5" %r in ('netstat /ano ^|findstr 192.168.3.42:22') do taskkill /F /PID %r
命令中^
是转义字符
- for /f 语法介绍:
FOR /F ["options"] %i IN (file) DO command FOR /F ["options"] %i IN ("string") DO command--注意双引号 FOR /F ["options"] %i IN ('command') DO command--注意单引号 ["options"]选项有多个: eol=c - 指定一个行注释字符,遇到c开头的行就忽略掉。 skip=n - 指定在文件开始时忽略的行数。 delims=xxx - 指定分隔符。默认是空格和TAB。 tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代 的 for 本身。这会导致额外变量名称的分配。m-n 格式为一个范围。通过 nth 符号指定 mth。如果 符号字符串中的最后一个字符星号, 那么额外的变量将在最后一个符号解析之后 分配并接受行的保留文本。 usebackq - 1.把单引号字符串作为命令;2.允许中使用双引号扩起文件名称。
这里主要说明for /f的用法。上面的命令中就是用了tokens选项,它用来确定使用待选文本的哪一列。
- 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语法:
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 AUTHORITY\SYSTEM" /FI "STATUS eq running"
3 条评论
老话题新解读,展现了深刻的反思精神。
每一个段落都紧密相连,逻辑清晰,展现了作者高超的写作技巧。
已添加贵站友链 |´・ω・)ノ
已刷新境内 CDN 缓存,境外 CDN 请等待自动刷新