通过bat脚本停止java进程的三个方法

通过bat脚本停止java进程的三个方法

1.拷贝java.exe

启动时复制java.exe程序修改进程映像名,然后通过映像名杀进程。

栗子

过程操作
拷贝程序拷贝一份java.exe程序,重名为tstop.exe,放在PATH下。
修改启动脚本@echo off
title tstop
tstop -jar …/lib/laucher.jar … …/lib/*.jar,…/conf,
执行停止命令C:\Users\alvin>tasklist | findstr tstop
tstop.exe 8520 Console 1 42,436 K
C:\Users\alvin>taskkill /f /im tstop.exe
成功: 已终止进程 “tstop.exe”,其 PID 为 8520。

优点: 操作简单可靠
缺点: 需要给每个java程序拷贝一份java.exe,映像名不能重复。

2.通过端口杀进程

通过端口找到PID,然后杀掉进程。

栗子
一个完整的脚本:

@echo off
rem 设置监听的端口号
set port=6200
echo port : %port%

for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^| findstr %port%`) do (
	if [%%d] EQU [LISTENING] (
		set pid=%%e
	)
)

for /f "usebackq tokens=1-5" %%a in (`tasklist ^| findstr %pid%`) do (
	set image_name=%%a
)

echo now will kill process : pid %pid%, image_name %image_name%
pause
rem 根据进程ID,kill进程
taskkill /f /pid %pid%
pause

优点: 相对于第一种方案,不用有额外的操作拷贝java.exe
缺点: 脚本相对复杂(主要是不熟悉batch脚本语法)

问题分析:
启动java程序后,执行命令netstat -ano | findstr port

C:\Users\alvin>netstat -ano | findstr 6200
  TCP    0.0.0.0:6200           0.0.0.0:0              LISTENING       10332
  TCP    [::]:6200              [::]:0                 LISTENING       10332

当执行telnet localhost port后,再执行命令netstat -ano | findstr port

C:\Users\alvin>netstat -ano | findstr 6200
  TCP    0.0.0.0:6200           0.0.0.0:0              LISTENING       10332
  TCP    [::]:6200              [::]:0                 LISTENING       10332
  TCP    [::1]:62644            [::1]:6200             TIME_WAIT       0

所以脚本里面需要判断
[%%d] EQU [LISTENING]
这句

3.通过jps命令

jps命令简介
    jps的英文名称是JVM Process Status Tool,功能和ps命令类似。可以列出正在运行的虚拟机进程、显示虚拟机执行主类(main()函数所在的类)的名称、这些进程的本地虚拟机的唯一ID(LVMID, Local Virtual Machine Identifier,LVMID和PID是一致的)。

选项作用
-q只输出LVMID(PID)
-m输出虚拟机进程启动时传递给主类main()函数的参数
-l输出主类的全名,如果进程执行时是Jar包,输出Jar路径
-v输出虚拟机进程启动时JVM参数

栗子

过程操作
启动程序通过启动脚本启动程序
@echo off
title tstop
tstop -jar …/lib/laucher.jar … …/lib/*.jar,…/conf,
找到PIDC:\Users\alvin>jps -l
5084 …/lib/ocean-laucher-1.0.5.6.jar
4696
9864 sun.tools.jps.Jps

参照栗子2遍历jps -l输出,找到PID 5084
通过PID杀掉进程 taskkill /f /pid 5084

优点: jps命令相对比netstat -ano语法清晰
缺点: java程序需要保证Jar包名(…/lib/laucher-1.0.5.6.jar)不同,相对拷贝java.exe要好一些

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值