显示具有不同pid的多个Java进程

问题描述 投票:0回答:1

我想使用服务名称获取所有正在运行的端口,但某些端口名称为java。

以下给定端口正在使用ansible进行获取。

ansible -m listen_ports_facts --user =用户名--become --ask-become-pass --tree portdir /全部

tcp:8011:java

tcp:8012:java

tcp:8013:java

我该怎么办?请在同一位置提出建议。

我已经尝试过ps -aux | grep“ PID”,发现有目录路径。

linux ansible port pid netstat
1个回答
0
投票

由于Java就像VM,如果不了解Java进程本身,就无法真正看到Java Process正在提供什么服务。通常,您使用参数运行Java VM-诸如java -jar /path/to/my/program.jar或在Wildfly等情况下。某些参数显示standalone的路径或其他。该参数可以提示您JavaVM正在运行什么。但这并不容易以一般方式进行过滤。

还有一些Java进程正在同一PID下打开多个端口(例如Wildfly打开端口以服务Java-Webcontainer以及某些管理Web UI等。

因此,快速的答案是-否-您通常无法通过检查端口来找出什么是Java VM。但是也许在SpringBoot的情况下,您可以将服务名称与-jar <program>.jar的参数值进行匹配,然后将设置为服务名称。另外-例如在Tomcat的情况下-没有-jar参数,而是类似java -cp ... -D..=.. org.apache.catalina.startup.Bootstrap ..的类名-向您显示这是Tomcat(代号Catalina)。我不确定是否有简单/准确的方法来标识classname参数...

在某些情况下,这对您无济于事-因为可能有多个端口,并且某些PID服务于相同的<program>。无论您使用哪种方式(例如,您说它在端口8011上为Wildfly或Tomcat服务)。这都是通用的。

[如果您需要知道端口上的内容,则可以解析该程序的配置(这意味着您需要了解过程结构),例如Tomcat将Webcontainers存储在/ webapps / *下。战争。并且因为在那里可能运行的不仅仅是一项服务(战争),所以该端口可能不是“一项”服务所独有的。

如果您的Java进程始终使用相同的端口,则可以将此端口添加到/etc/services或在您的环境中使用key = port,value = servicename进行命令以静态映射端口-服务名映射。当端口服务名称不匹配时,您也可以添加警告。

© www.soinside.com 2019 - 2024. All rights reserved.