前言
因平时使用一些socket服务时,总是发现我要用的端口总是被占用,导致一些服务无法启动,而每次启动前人工去检索在杀死进程就很麻烦,于是就干脆封装一个函数直接整合进项目中彻底解放我的双手。
注意事项
该方式只支持在windows平台上使用,其他平台暂未测试,不清楚是否兼容
首先需要导入相关的模块
import os
import signal
安装对应模块的方式
# pip快速安装
pip install signal
首先找到占用端口的进程pid
import os
result = os.popen('netstat -aon|findstr "9001"')
print(result )
展示结果:
返回的结果是一个文件对象,这个时候就需要读取它
有两种方式
# 方式1 该方式简单粗暴
print(result.read())
# 方式2 该方式更加优雅
with os.popen('netstat -aon|findstr "9001"') as fp:
result = fp.read()
print(result )
得到的结果如下图,为字符串:
既然得到了结果,就可以着手解析,获取所需数据
import os
with os.popen('netstat -aon|findstr "9001"') as res:
res = res.read().split('\n')
result = []
for line in res:
temp = [i for i in line.split(' ') if i != '']
if len(temp) > 4:
print({'pid': temp[4], 'address': temp[1], 'state': temp[3]})
解析后的结果为:
现在很方便操作了,因为我只需要部分数据,所以并没有取全部。
得到了进程pid,接下来是杀死进程。
直接调用OS的杀死进程命令:os.kill(进程pid, signal.SIGINT)
于是我们来改装下代码:
import os
import signal
# 判断端口是否被占用,占用直接把占用端口的进程给杀掉
with os.popen('netstat -aon|findstr "9001"') as res:
res = res.read().split('\n')
result = []
for line in res:
temp = [i for i in line.split(' ') if i != '']
if len(temp) > 4:
result.append(temp[4])
for i in result:
os.kill(int(i), signal.SIGINT)
print(f"杀死占用端口的进程成功,该进程pid:{i}")
执行结果为: