在Ubuntu-Linux上获取Java中给定端口的进程名称?

时间:2014-05-24 14:57:31

标签: java linux ubuntu

我想在Java,Ubuntu中获取给定PORT ID的进程名称。我在Windows中找到了如何操作的示例(RunTime中的任务列表)。但我需要在Linux中知道这一点。

2 个答案:

答案 0 :(得分:4)

如果要列出侦听某个端口的应用程序,可以将unix命令lsofawk结合使用:

lsof -i :80 | awk '{print $1}'

这将列出您,即来自侦听端口80的进程的命令名。

在你的javacode中你写了以下内容:

int port = 80;
Process p = Runtime.getRuntime().exec("lsof -i :" + port + " | awk '{print $1}'");

BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((s = reader.readLine()) != null) {
    System.out.println(s);
}

请注意,如果您想根据流程ID(PID)获取流程名称,则可以使用此代码:

Process p = Runtime.getRuntime().exec("ps -ef | awk '{if($2==\"" + pid + "\") print $8}'");

答案 1 :(得分:2)

/proc文件系统有帮助。 /proc/$PID/exe是与进程ID对应的可执行文件的符号链接。显然,您只需从Java中读取该文件即可。

编辑:之前,你问过“进程ID”,现在它是关于一个TCP / IP端口......这使得我的答案毫无用处。