我想在Java,Ubuntu中获取给定PORT ID的进程名称。我在Windows中找到了如何操作的示例(RunTime中的任务列表)。但我需要在Linux中知道这一点。
答案 0 :(得分:4)
如果要列出侦听某个端口的应用程序,可以将unix命令lsof
与awk
结合使用:
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端口......这使得我的答案毫无用处。