Python 获取端口进程

引言

在开发过程中,我们经常需要获取某个端口的进程信息,以便进行相关的操作。下面将会介绍如何使用 Python 来实现获取端口进程的功能。

整体流程

首先,让我们来看一下整个过程的流程图。

flowchart TD
    A[开始] --> B[导入相关模块]
    B --> C[获取端口占用信息]
    C --> D[解析占用信息]
    D --> E[获取进程信息]
    E --> F[输出结果]
    F --> G[结束]

步骤说明

接下来,将逐步介绍每个步骤需要做的事情,并提供相应的代码和注释。

1. 导入相关模块

首先,我们需要导入一些 Python 的模块来帮助我们完成任务。其中,我们需要使用 socket 模块来获取端口占用信息,使用 psutil 模块来获取进程信息。

# 导入相关模块
import socket
import psutil

2. 获取端口占用信息

接下来,我们需要获取指定端口的占用信息。我们可以通过创建一个临时的 Socket 连接来获取该端口的占用情况。

# 获取端口占用信息
def get_port_usage(port):
    # 创建一个临时的 Socket 连接
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 设置超时时间为1秒钟
        s.settimeout(1)
        # 尝试连接指定端口
        result = s.connect_ex(('127.0.0.1', port))
        # 如果连接成功,则说明该端口已被占用
        if result == 0:
            return True
        else:
            return False

3. 解析占用信息

获取端口占用信息后,我们需要对其进行解析,以获取进程的相关信息。我们可以使用 psutil 模块的 Process 类来获取进程信息。

# 解析占用信息
def parse_port_usage(port):
    # 获取端口占用信息
    is_used = get_port_usage(port)
    # 如果端口已被占用,则获取进程信息
    if is_used:
        # 获取进程ID
        pid = psutil.net_connections()[0].pid
        # 获取进程名称
        process_name = psutil.Process(pid).name()
        # 返回进程信息
        return pid, process_name
    else:
        return None

4. 获取进程信息

在获取到进程的相关信息后,我们可以对其进行进一步的处理,以满足实际需求。

# 获取进程信息
def get_process_info(port):
    # 解析占用信息
    process_info = parse_port_usage(port)
    # 如果获取到进程信息,则进行处理
    if process_info:
        pid, process_name = process_info
        # 获取进程的其他信息,如CPU占用率、内存占用率等
        cpu_percent = psutil.Process(pid).cpu_percent()
        memory_percent = psutil.Process(pid).memory_percent()
        
        # 返回完整的进程信息
        return {
            'pid': pid,
            'process_name': process_name,
            'cpu_percent': cpu_percent,
            'memory_percent': memory_percent
        }
    else:
        return None

5. 输出结果

最后,我们可以将获取到的进程信息进行输出,以便查看或进行其他操作。

# 输出结果
def print_process_info(process_info):
    if process_info:
        print('进程ID:', process_info['pid'])
        print('进程名称:', process_info['process_name'])
        print('CPU 占用率:', process_info['cpu_percent'])
        print('内存占用率:', process_info['memory_percent'])
    else:
        print('端口未被占用')

完整代码

下面是完整的代码:

# 导入相关模块
import socket
import psutil

# 获取端口占用信息
def get_port_usage(port):
    # 创建一个临时的 Socket 连接
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 设置超时时间为1秒钟
        s.settimeout(1)
        # 尝试连接指定端口
        result =