标题: [其他] 求助批处理kill进程如何根据端口号获取PID? [打印本页]
作者: hahamj 时间: 2019-4-22 12:12 标题: 求助批处理kill进程如何根据端口号获取PID?
目前BAT脚本中对某个java app shutdown后,通过ping -n 10 127.0>nul进行类似等待的行为。
实际情况中,会发生java进程并没有真正kill掉的情况。
请问如何获取该java app的进程,然后kill掉,再进行后续其它动作?
imagename都是java.exe,且存在多个java.exe(不同的application), 通过tasklist|find /i "name" 获取不到对应的信息,就是cmd命令行中不显示任何信息。
有参考这篇帖子http://www.bathome.net/viewthrea ... mp;page=1#pid195613的新开句柄方法,即tasklist 2>nul|find /i "name",也是无法显示。
好在知道端口号,有尝试通过netstat -ano|findstr port,先获取对应的PID,再通过taskkill进行操作。
请问如果获取netstat -ano|findstr port结果中的PID呢?
感谢。
作者: zaqmlp 时间: 2019-4-22 14:29
- @echo off
- set info=互助互利,支付宝扫码头像,感谢赞助
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- set port=8890
- >"%tmp%\#.t" echo;try{WSH.echo(WSH.StdIn.ReadLine().replace(/^^.+\s(\d+)/,'$1'))}catch(e){}
- for /f %%a in ('netstat -ano^|findstr /c:":%port% "^|cscript -nologo -e:jscript "%tmp%\#.t"') do set pid=%%a
- echo;pid=%pid%
- if defined pid (
- taskkill /f /pid %pid% /t
- )
- echo;%info%
- pause
复制代码
作者: Batcher 时间: 2019-4-22 17:33
netstat -ano|findstr 直接这样写是不严谨的,容易导致误杀进程。
建议考虑从其他方面来区分,例如:
wmic process where name="java.exe" get ExecutablePath /value
看看java可执行文件对应的路径是否有区别。如有区别,可以根据ExecutablePath杀掉对应的进程。
如果ExecutablePath全都相同,那么再考虑加一些条件判断让它更加严谨一些。- @echo off
- set "IP=192.168.0.100"
- set "Port=49770"
- for /f "tokens=2,5" %%a in ('netstat -ano') do (
- if "%%a" equ "%IP%:%Port%" (
- echo kill %IP%:%Port% --- %%b
- taskkill /f /pid %%b
- )
- )
复制代码
作者: hahamj 时间: 2019-4-23 11:13
回复 3# Batcher
多谢哦。
execute path这类信息显示不出来,是空的。估计有限制。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |