在Python中查看端口占用的进程以及其对应的程序路径(包括Java程序和EXE程序),依然可以使用psutil
库来完成。然而,需要注意的是,Java程序通常是以JVM的形式运行的,其主进程可能只是JVM本身,而非具体的Java应用。因此,当你看到的是Java虚拟机(如java.exe
或javaw.exe
)时,可能需要额外的信息来确定实际运行的Java应用。
以下是一个通用的Python脚本,用于查找占用特定端口的进程及其路径(无论是Python、Java、EXE或其他任何类型的进程):
python
import psutil
import socket
def get_process_info_by_port(port):
try:
# 获取所有连接信息
for proc in psutil.process_iter(['pid', 'name', 'exe', 'cmdline']):
# 获取进程的所有网络连接
connections = proc.connections(kind='inet')
for conn in connections:
# 查找监听指定端口的连接
if conn.status == 'LISTEN' and conn.laddr.port == port:
process_info = {
'pid': proc.pid,
'name': proc.name(),
'exe': proc.exe(),
'cmdline': ' '.join(proc.cmdline()) if proc.cmdline() else None
}
return process_info
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return None
# 查找占用特定端口(如8080)的进程信息
process_info = get_process_info_by_port(8080)
if process_info:
print("PID: ", process_info['pid'])
print("Process Name: ", process_info['name'])
print("Executable Path: ", process_info['exe'])
print("Command Line: ", process_info['cmdline'])
else:
print("No process found listening on the specified port.")
请确保已经安装了psutil
库。通过cmdline
属性,有时可以得到更详细的启动命令行参数,这对于识别运行的Java应用可能更有帮助,因为它可能包含了.jar文件的路径或者其他关于应用程序的具体信息。但对于某些封装良好的Java应用,可能仍需结合其它工具或方式进一步分析。