找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27993|回复: 3

[其他] 求助批处理kill进程如何根据端口号获取PID?

[复制链接]
发表于 2019-4-22 12:12:57 | 显示全部楼层 |阅读模式
目前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呢?

感谢。
发表于 2019-4-22 14:29:02 | 显示全部楼层
  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. set port=8890
  6. >"%tmp%\#.t" echo;try{WSH.echo(WSH.StdIn.ReadLine().replace(/^^.+\s(\d+)/,'$1'))}catch(e){}
  7. for /f %%a in ('netstat -ano^|findstr /c:":%port% "^|cscript -nologo -e:jscript "%tmp%\#.t"') do set pid=%%a
  8. echo;pid=%pid%
  9. if defined pid (
  10.     taskkill /f /pid %pid% /t
  11. )
  12. echo;%info%
  13. pause
复制代码
发表于 2019-4-22 17:33:50 | 显示全部楼层
netstat -ano|findstr 直接这样写是不严谨的,容易导致误杀进程。
建议考虑从其他方面来区分,例如:
wmic process where name="java.exe" get ExecutablePath /value
看看java可执行文件对应的路径是否有区别。如有区别,可以根据ExecutablePath杀掉对应的进程。

如果ExecutablePath全都相同,那么再考虑加一些条件判断让它更加严谨一些。
  1. @echo off
  2. set "IP=192.168.0.100"
  3. set "Port=49770"
  4. for /f "tokens=2,5" %%a in ('netstat -ano') do (
  5.     if "%%a" equ "%IP%:%Port%" (
  6.         echo kill %IP%:%Port% --- %%b
  7.         taskkill /f /pid %%b
  8.     )
  9. )
复制代码
 楼主| 发表于 2019-4-23 11:13:26 | 显示全部楼层
回复 3# Batcher
多谢哦。
execute path这类信息显示不出来,是空的。估计有限制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 03:59 , Processed in 0.017029 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表