psutil模块根据cmdline查找使用端口
时间: 2023-07-20 22:07:47 浏览: 51
可以使用psutil模块的net_connections()方法来获取当前系统上所有的网络连接,然后根据cmdline参数查找使用指定端口的进程。
具体实现代码如下:
```python
import psutil
def find_process_by_port(port):
for conn in psutil.net_connections():
if conn.status == 'LISTEN' and ':' + str(port) in conn.laddr[1]:
process = psutil.Process(conn.pid)
if process.cmdline() and 'python' in process.cmdline()[0]:
return process
return None
# 使用示例
process = find_process_by_port(8080)
if process:
print('进程名:', process.name())
else:
print('未找到使用8080端口的进程')
```
上述代码中,find_process_by_port函数接收一个参数port,表示要查找的端口号。函数首先通过psutil.net_connections()方法获取当前系统上所有的网络连接,然后遍历每一个连接,如果发现该连接是LISTEN状态,并且连接的本地地址中包含指定的端口号,那么就获取该连接对应的进程,并判断该进程是否是Python进程。如果是,则返回该进程对象;否则继续查找。如果最终未找到符合条件的进程,则返回None。
使用示例中,我们通过调用find_process_by_port函数,并传入要查找的端口号8080,来获取使用该端口的进程对象。如果找到了,就输出该进程的名称;否则输出未找到的提示信息。