IntelliJ IDEA意外终止后能否重连.run.xml启动的Java进程查看输出
问题:IntelliJ IDEA意外终止后,能否不重启Java进程就重新连接查看stdout/stderr?
我通过IntelliJ IDEA的.run.xml配置文件启动了一个Java程序,IntelliJ IDEA意外终止,但该Java进程仍保持正常运行状态。请问是否无需重启该进程,就能重新连接/附加到它,以查看其标准输出(stdout)和标准错误输出(stderr)?
进程的启动命令行如下:
mortenbj 16054 1 2 14:23 pts/3 02:24:18 /usr/lib/jvm/java-21-openjdk-amd64/bin/java \ -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=54403 \ -Dcom.sun.management.jmxremote.rmi.port=54403 -Dcom.sun.management.jmxremote.ssl=false \ -Dh2.port=4409 -Dhvdc.eu.node=true -Djava.rmi.server.hostname=127.0.0.1 \ -Dsimulering=true -Duser.country=se -Xdebug -Xmx512m \ -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 \ -javaagent:/usr/share/intellij/lib/idea_rt.jar=40229 -Dfile.encoding=UTF-8 \ -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath ......
解决方案
可以不用重启进程,通过以下几种方法重新连接并查看输出:
方法1:IntelliJ IDEA远程调试(推荐)
你的进程启动时已经配置了JDWP调试端口和IDEA运行时代理,直接通过IDEA远程附加即可:
- 打开IDEA,进入Run/Debug Configurations → 点击
+号选择Remote - 配置
Host为127.0.0.1,Port填5006(对应参数里的-Xrunjdwp:address=5006) - 启动该远程配置,IDEA会自动附加到运行中的进程,之后就能在IDEA的Run窗口实时查看stdout和stderr,还能进行断点调试
方法2:Linux proc文件系统直接查看
在Linux环境下,可通过/proc文件系统直接读取进程的输出文件描述符:
- 实时查看标准输出:
tail -f /proc/16054/fd/1 - 实时查看标准错误:
tail -f /proc/16054/fd/2
这个方法无需依赖任何Java工具,直接用系统命令就能追踪输出。
方法3:JMX连接获取输出
进程开启了JMX远程服务(端口54403),可以用JConsole或VisualVM连接到127.0.0.1:54403,通过java.lang.Runtime相关的MBean来获取进程输出,不过这种方式操作相对繁琐,不如前两种直观。
内容的提问来源于stack exchange,提问作者MortenB
相关产品推荐
相关产品推荐

