在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
有没有跨平台的方法来解决这个问题?
作为相关参考,一旦我了解了过程,psutil http://code.google.com/p/psutil/库非常好,让我能够以跨平台的方式确定它的各种有用的流程信息。我现在无法让第一部分跨平台工作(查找 pid)。
如果不熟悉lsof -i
开关,输出如下所示(启动 python 进程并打开 TCP 套接字侦听端口 1234 后):
$ 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)