Windows环境下如何检查Jar运行状态并查看终端日志
一、理解wmic命令的输出结果
你执行的wmic process where "name like '%java%'" get commandline,processid会返回两列核心内容:
- ProcessId:进程的唯一ID(PID)
- CommandLine:启动该进程的完整命令
举个实际输出的例子:
CommandLine ProcessId java -jar filename.jar 1234 javaw -jar filename.jar 5678
通过CommandLine列就能直接区分两个Jar包进程:带java -jar的是第一个启动的进程,带javaw -jar的是第二个,只要能看到这两行,就说明进程仍在运行。
二、更直观的进程检查方法
除了wmic,还有两种更易上手的方式:
任务管理器图形化检查
按Ctrl+Shift+Esc打开任务管理器,切换到“详细信息”标签,找到java.exe和javaw.exe进程,右键选择“查看命令行”,就能看到对应的Jar包启动指令,直接确认进程是否存活。tasklist命令行检查- 检查
java.exe进程(带终端的启动方式):tasklist /fi "imagename eq java.exe" /v - 检查
javaw.exe进程(无终端的启动方式):tasklist /fi "imagename eq javaw.exe" /v
加
/v参数会显示详细信息,其中“命令行”列就是启动Jar包的完整指令,能快速对应到你的两个进程。- 检查
三、日志查看问题解决
不同启动方式的日志处理逻辑有差异,分情况说明:
1. java -jar启动的进程
你关闭终端后,java命令原本输出到终端的日志会直接丢失(终端是日志的输出目标,关闭后输出流被截断)。如果程序本身没有配置独立的日志文件(比如用Log4j、SLF4J等框架写入本地文件),现在无法通过终端查看实时日志,只能检查Jar包所在目录下是否有程序自行生成的日志文件。
后续启动优化方案:下次启动时将日志重定向到文件:
java -jar filename.jar > app_java.log 2>&1
这样标准输出和错误日志都会写入app_java.log,之后可以用以下命令实时查看:
- PowerShell中:
Get-Content app_java.log -Wait - Git Bash或类Unix终端中:
tail -f app_java.log
2. javaw -jar启动的进程
javaw本身就是无窗口的Java启动器,默认不会输出任何内容到终端。同样,如果程序没配置日志框架写入文件,也无法查看日志。
后续启动优化方案:
- 优先让程序配置日志框架(如Log4j2),指定固定的日志文件路径,这样无论用什么方式启动,日志都会稳定写入文件。
- 临时需要重定向日志的话,可通过以下命令启动:
其中start /B javaw -jar filename.jar > app_javaw.log 2>&1/B参数表示后台启动,不会弹出新窗口。
内容的提问来源于stack exchange,提问作者altontonie

