一个简单的windows环境jar包部署后台运行和通过端口号停止进程,记录一下,做一下相关知识储备。
1.部署jar包,后台运行
在jar包同级目录下创建一个.txt文件,将下列代码复制进去,xxx.jar替换为你的jar名称,最后将.txt改为.bat即可。
@echo off
start /b java -jar xxx.jar -Dfile.encoding=utf-8 > start.log 2>&1
exit
逐句拆解
- @echo off
关闭命令回显,让批处理运行时不把每一条命令本身打印出来。 - start /b java -jar xxx.jar -Dfile.encoding=utf-8 > start.log 2>&1
- start /b —— 在后台启动新进程(不弹独立窗口,与当前控制台共用窗口)。
- java -jar xxx.jar -Dfile.encoding=utf-8 —— 真正要跑的程序:以 UTF-8 编码方式启动 jar 包。
- > start.log 2>&1 —— 标准输出、标准错误都重定向到当前目录下的 start.log 文件。
- exit
批处理自身立即退出,不再等待 java 进程。由于 java 已被 start 扔进后台,因此即使批处理窗口关闭,java 也会继续运行。
2.通过端口号停止进程
如果要bat窗口中手动输入端口号就改成下面这种(重启命令同理):
set /p port=请输入要停止的端口号:
下面假设端口是8080
@echo off
chcp 65001
set port=8080
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
echo kill the process %%m who use the port
taskkill /pid %%m -t -f
goto q
)
:q
逐句拆解
-
@echo off
关闭命令回显,脚本运行时不把每一条命令本身打印出来。 -
chcp 65001
把当前控制台代码页改成 UTF-8,后续输出的中文不会乱码。 -
set port=8080
定义变量port,值为 8080,后面拿来当端口号匹配。 -
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (-
启动子进程执行
netstat -ano,列出所有连接与 PID。 -
结果通过管道交给
findstr,只保留包含:8080的行。 -
tokens=1-5表示把每行按空格拆成 5 段,依次装进%%i %%j %%k %%l %%m。 -
其中
%%m正好就是最后一列——占用该端口的进程 PID。
-
-
echo kill the process %%m who use the port
打印提示信息,告诉用户马上要杀掉哪个 PID。 -
taskkill /pid %%m -t -f
强制(-f)连同子树(-t)一起终止指定 PID。 -
goto q
只要找到第一条占用 8080 的进程并杀掉,就立刻跳出整个循环,不再继续搜索。 -
:q
标签,循环跳转或脚本自然执行到此结束。
一句话总结
自动查找第一个占用 8080 端口的进程,强制杀掉后立刻退出,不重复处理其余可能存在的同名端口连接。
3.通过端口号重启进程
@echo off
set port=8080
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
echo kill the process %%m who use the port
taskkill /pid %%m -t -f
goto start
)
:start
start /b java -jar xxx.jar -Dfile.encoding=utf-8 > start.log 2>&1
注:重启也可以以引用的方式,先执行停止脚本再执行启动脚本完成重启
例如:
需要保证 start.bat 和 stop.bat 与 restart.bat 放在同一目录即可。
最小可运行的 restart.bat 只需三行:
@echo off
call "%~dp0stop.bat"
call "%~dp0start.bat"
解释
-
%~dp0表示“当前批处理所在目录”,自带结尾反斜杠,能兼容空格/中文路径。 -
用
call而不用start,目的是让stop.bat和start.bat在当前进程顺序执行;
若用start会另开进程,可能导致start.bat在stop.bat还没结束时就运行。 -
如果
stop.bat或start.bat里已经写了exit,记得把exit改成exit /b,
否则整个 CMD 窗口会被直接关掉。
chcp 是 Windows 系统下的一个命令,用于更改当前的活动代码页。使用 chcp 命令可以更改命令提示符窗口或批处理文件所使用的代码页,修改编码格式,解决中文乱码问题。
| 代码页编号 | 代码页名称 |
|---|---|
| 437 | 美国 MS-DOS |
| 936 | 简体中文(GB2312) |
| 949 | 韩文 |
| 950 | 繁体中文(Big5) |
| 1252 | 西欧语言 |
| 65001 | Unicode (UTF-8) 编码 |
1421

被折叠的 条评论
为什么被折叠?



