[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 求助批处理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呢?

感谢。

  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
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher
多谢哦。
execute path这类信息显示不出来,是空的。估计有限制。

TOP

返回列表