【问题标题】:Locate the java debug port from ps in Unix在 Unix 中从 ps 找到 java 调试端口
【发布时间】:2013-12-17 01:10:32
【问题描述】:

当使用:“ps -fu ${USER} | grep address”时,我可以找到 java 进程以及作为进程命令行一部分出现的调试端口号。 我的问题是如何从包含许多字符的命令行中提取端口号。这个问题可以总结为如何在两个字符串之间提取一个单词。我一直在寻找如何使用 grep、awk 或 sed 来做到这一点。但我所有的试验都以显示整个进程命令行而不仅仅是 java 端口号结束。

先谢谢了。

【问题讨论】:

  • 如果您能添加这样一个命令行的示例,那将是最有帮助的。我只能假设它类似于java -Xdebug -Xrunjdwp:transport=dt_socket,address=8998,server=y -jar myapp.jar,但当然我只是在猜测。
  • 请始终在发布新问题之前先进行搜索,并且,请尝试提出真正的问题(在您的情况下,如何在两个字符串之间提取单词)而不是从上下文开始.如果您删除上下文,您还会很快注意到该问题已被提出。

标签: java unix port ps


【解决方案1】:

您可以使用sed提取调试端口:

ps -fu ${USER} | grep address | sed 's/.*address=\([0-9]*\).*/\1/'

更新

ps 的输出可能包括grep 命令本身。您可以再次使用grep 将其过滤掉:

ps -fu ${USER} | grep address | sed 's/.*address=\([0-9]*\).*/\1/' | grep ^\d

【讨论】:

  • 非常感谢!最终,我使用以下内容仅获取端口号: ps -fu ${USER} | grep 地址 | sed 's/.*address=([0-9]*).*/\1/' | head -n 1. 实际上,现在我注意到对于某些服务器,我可以在打印“grep 地址”的行之后和之前看到调试端口。奇怪...
  • 最后这是我发现完美运行的命令:ps -fu ${USER} | grep 地址 | sed 's/.*address=\([0-9]*\).*/\1/' | grep -v ${用户} | grep -v "^[[:blank:]]*$" 再次感谢您的出色回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2018-12-08
  • 2014-04-03
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多