Я хочу получить имя процесса для данного ИМЯ ПОРТА в Java, Ubuntu. Я нашел образцы, как это сделать в окнах (список задач в RunTime). Но мне нужно знать это в Linux.
Если вы хотите перечислить приложение, которое прослушивает определенный порт, вы можете использовать команду unix lsof
в сочетании с awk
:
lsof -i :80 | awk '{print $1}'
В этом списке вы укажете имя команды из процесса, который прослушивает порт 80.
В вашем джавакоде вы пишете следующее:
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);
}
Обратите внимание: если вы хотите получить имя процесса на основе идентификатора процесса (PID), вы можете использовать его вместо этого:
Process p = Runtime.getRuntime().exec("ps -ef | awk '{if($2==\"" + pid + "\") print $8}'");
Файловая система /proc
помогает. /proc/$PID/exe
является символической ссылкой на исполняемый файл, соответствующий идентификатору процесса. Очевидно, вы можете просто прочитать этот файл с Java.
Изменение: раньше вы просили "идентификатор процесса", теперь речь идет о TCP/IP-порту..., который делает мой ответ бесполезным.