gpt4 book ai didi

linux - 在 Python 3 中查找给定套接字和 inode 的进程 ID

转载 作者:可可西里 更新时间:2023-11-01 11:44:03 25 4
gpt4 key购买 nike

/proc/net/tcp 为我提供了一个套接字的本地地址、端口和 inode 编号(例如 0.0.0.0:5432 和 9289)。

根据上述信息,我想找到特定进程的 PID。

可以打开/proc 中每个编号的文件夹,然后使用类似“$ sudo ls -l/proc/*/fd/2>/dev/null | grep socket ”。然而,这似乎比必要的计算成本更高,因为任何给定系统上 <5% 的进程都打开了 TCP 套接字。

查找已打开给定套接字的 PID 的最有效方法是什么?我更喜欢使用标准库,目前我正在使用 Python 3.2.3 进行开发。

编辑:从问题中删除了代码示例,因为它们现在包含在下面的答案中。

最佳答案

下面的代码完成了最初的目标:

def find_pid(inode):

# get a list of all files and directories in /proc
procFiles = os.listdir("/proc/")

# remove the pid of the current python process
procFiles.remove(str(os.getpid()))

# set up a list object to store valid pids
pids = []

for f in procFiles:
try:
# convert the filename to an integer and back, saving the result to a list
integer = int(f)
pids.append(str(integer))
except ValueError:
# if the filename doesn't convert to an integer, it's not a pid, and we don't care about it
pass

for pid in pids:
# check the fd directory for socket information
fds = os.listdir("/proc/%s/fd/" % pid)
for fd in fds:
# save the pid for sockets matching our inode
if ('socket:[%d]' % inode) == os.readlink("/proc/%s/fd/%s" % (pid, fd)):
return pid

关于linux - 在 Python 3 中查找给定套接字和 inode 的进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com