1、查看端口对应PID命令为
#8080端口举例
netstat -ano | findstr "8080"
2、结束进程命令为
taskkill /?
/S system 指定要连接的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示
输入。
/FI filter 应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
/PID processid 指定要终止的进程的 PID。
使用 TaskList 取得 PID。
/IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来
指定所有任务或映像名称。
/T 终止指定的进程和由它启用的子进程。
/F 指定强制终止进程。
/? 显示帮助消息。
可见taskkill命令结束进程,并不符合预期效果,一般情况下,用户通常只会以进程名(.exe)或端口号(port)结束进程,很少有PID结束进程的场景,如:
1、结束QQ等明确名称的进程时,使用进程名
2、APAHCE2执行期间,端口被占用,这类不确定进程名的应用,则使用端口号
taskkill支持#1,那么编写的bat文件只要支持#2的方式就行了,既然通过port结束进程,就必须得到port号。
基于CMD的for命令对字符串剪切参数tokens,得如下命令
for /f "tokens=5" %%a in ('netstat -ano ^| findstr "8080"') do echo %%a
得到a的值就是单纯的port对应的PID,基于此方法,将echo命令修改为taskkill命令,即可完成通过端口结束进程的操作,如下:
for /f "tokens=5" %%a in ('netstat -ano ^| findstr "8080"') do taskkill /pid %%a -t -f
pasue
:pause可删除,保留可以查看具体执行结果,建议保留或使用“>”将结果保留。
提示:直接使用CMD窗口执行命令出现无法使用的情况,需要将^,%等字符删除再使用,此为CMD和BAT的区别,是正常现象。