В Ubuntu у меня есть интерактивная программа, которую я подозреваю, что она висит на определенном порту, не знаю, какой из них.
Это сценарий оболочки, который вызывает команду 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}" "$@"
Разделите это на несколько команд. Сначала запустите приложение с помощью java...
Затем вы можете использовать jps
чтобы увидеть идентификатор процесса нового Java-процесса (jps
должен находиться в той же папке, что и java
).
Теперь вы можете использовать lsof -np <id>
чтобы получить список дескрипторов файлов.
Но программы Java также могут зависать в цикле. Чтобы узнать, что делает программа в данный момент, используйте jstack
или jconsole
.