2014-05-24 51 views
1

我想在Java,Ubuntu中获取给定PORT ID的进程名称。我发现样本如何在Windows中执行(Runtime中的tasklist)。但我需要在Linux中知道这一点。在Ubuntu-Linux上获取给定Java端口的进程名称?

+1

你的意思是进程id? – assylias

+0

不是进程ID。我想知道给定端口的进程名称。 –

+0

@Débora我认为你刚刚改变了以前“如何获得给定PID的进程名称”的整个问题的本质。 –

回答

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}'"); 
+0

你最初的答案很有趣,它仍然不清楚操作者想要什么,所以我已经添加了PID的代码作为旁注 - 希望你不介意。 – assylias

+0

@chresse。我非常感谢你的支持。这正是我所追求的。再一次,我非常感谢你。 –

+0

@assylias:当然我没问题 - 你非常欢迎。只要它有助于其他人:) – chresse

2

/proc文件系统有帮助。 /proc/$PID/exe是与进程ID对应的可执行文件的符号链接。显然,你可以简单地从Java读取该文件。

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

+0

谢谢。但是请介意让我知道示例代码,请使用Java? –