Linux 根据端口找出 Java 程序

介绍

在 Linux 系统中,我们经常需要查找正在运行的进程中使用了哪些端口。特别是在开发和调试 Java 程序时,我们可能需要找到正在运行的 Java 程序所使用的端口号。本文将介绍如何使用 Linux 命令和工具来查找正在运行的 Java 程序,并根据端口号找出对应的进程。

查找端口对应的进程

使用 netstat 命令

netstat 命令是一个用于显示网络连接、路由表和网络接口等信息的实用工具。我们可以通过 netstat 命令来查找正在监听指定端口的进程。

下面是使用 netstat 命令查找端口对应的进程的示例:

$ netstat -tunlp | grep <port>

其中,-tunlp 参数用于显示 TCP、UDP 和 Unix 套接字的监听状态,grep 命令用于过滤出指定端口号对应的行。

使用 lsof 命令

lsof 命令用于列出当前系统中打开的文件和文件描述符。我们可以通过 lsof 命令来查找某个进程打开的所有文件和端口。

下面是使用 lsof 命令查找端口对应的进程的示例:

$ lsof -i :<port>

其中,-i :<port> 参数用于过滤出使用指定端口号的进程。

使用 jps 命令

jps 命令是 JDK 自带的一个工具,用于列出当前系统中正在运行的 Java 进程。我们可以通过 jps 命令来查找正在运行的 Java 程序的进程 ID。

下面是使用 jps 命令查找正在运行的 Java 程序的示例:

$ jps

jps 命令会列出所有正在运行的 Java 程序的进程 ID 和程序的主类名。

查找进程对应的 Java 程序

使用 ps 命令

ps 命令用于显示当前正在运行的进程。我们可以通过 ps 命令来查找某个进程对应的 Java 程序。

下面是使用 ps 命令查找进程对应的 Java 程序的示例:

$ ps -ef | grep <pid>

其中,-ef 参数用于显示所有进程的完整信息,grep 命令用于过滤出指定进程 ID 对应的行。

使用 jmap 命令

jmap 命令是 JDK 自带的一个工具,用于生成对应 Java 进程的内存转储快照。我们可以通过 jmap 命令来查找某个进程对应的 Java 程序的主类名。

下面是使用 jmap 命令查找进程对应的 Java 程序的示例:

$ jmap -dump:format=b,file=<dumpfile> <pid>
$ jmap -histo <pid>

jmap -dump 命令用于生成内存转储快照文件,-histo 命令用于显示堆中对象的统计信息。通过查看转储快照文件和堆统计信息,可以找到 Java 程序的主类名。

示例

假设我们有一个正在运行的 Java 程序,它监听了 8080 端口。我们想要找到该进程的进程 ID 和主类名。

首先,我们可以使用 netstat 命令来查找端口对应的进程:

$ netstat -tunlp | grep 8080

输出类似于:

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      12345