1

在 Ubuntu 下,我有一个交互式程序,我怀疑它正在挂起监听特定端口,不知道是哪个端口。

它是一个 shell 脚本,在其最后一行调用 java 命令。

当它处于“挂起”状态时,如何轻松找出它正在侦听的端口?

我试图将 lsof 放在命令前面,但是写出了一条巨大的路径,上面写着“lsof:路径太长”

lsof -c java  ${JAVA_OPTS} -classpath "${SERVLET_API}:${JSP_API}:${OPENCMS_CLASSPATH}:${TOMCAT_CLASSPATH}:${OPENCMS_BASE}/classes" org.opencms.main.CmsShell -base="${OPENCMS_BASE}" "$@"
4

1 回答 1

1

将其拆分为几个命令。首先使用java .... 然后您可以使用jps查看新 Java 进程的进程 ID(jps应该在同一文件夹中java)。

现在您可以使用lsof -np <id>来获取文件描述符列表。

但是 Java 程序也可以在循环中挂起。要查看程序当前正在做什么,请使用jstackjconsole

于 2015-01-20T16:21:33.663 回答