在 Linux 中,我可以使用 lsof -i
,如以下函数所示:
def FindProcessUsingPort(portnum):
import os
fp = os.popen("lsof -i :%s" % portnum)
lines = fp.readlines()
fp.close()
pid = None
if len(lines) >= 2:
pid = int(lines[1].split()[1])
return pid
有没有跨平台的方法来解决这个问题?
作为相关引用,一旦我知道进程 ID,psutil库非常好,让我能够以跨平台的方式确定它的各种有用的流程信息。我目前无法让第一部分跨平台工作(查找 pid)。
如果不熟悉 lsof -i
开关,输出如下所示(启动一个在端口 1234 上打开 TCP 套接字监听的 Python 进程后):
$ lsof -i :1234 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 22380 russ 15u IPv4 4015476 0t0 TCP *:1234 (LISTEN)
最佳答案
这个答案与您的问题更相关,但是如果您可以找到特定于操作系统的方法,但没有严格可移植的方法,那么我会让您的模块如下所示
def find_port_owner_windows(p):
doit()
def find_port_owner_linux(p):
doit2()
port_finders = {'nt': find_port_owner_windows,
'posix': find_port_owner_linux}
try:
find_port_owner = port_finders[os.name]
except KeyError:
raise RuntimeError("No known port finder for your OS (%s)" % os.name)
关于python - 在 python 中,是否有跨平台的方法来确定哪个进程正在监听给定端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874481/