python项目已经停止,子进程仍在运行
问题来源:使用scrapy+selenium时,如果手动关闭,也就是叉掉cmd窗口,这时候,会发现项目已经被强制关闭了,但是由selenium产生的浏览器还存在,且占用大量内存。
解决方法(监控法):通过python脚本,检测当前进程,然后挑选出符合自己浏览器的进程,查看父进程是否存在,如果不存在,那么子进程进行关闭
代码如下:
#获取所有进程并返回
def get_process():
pid = psutil.pids()
return pid
#创建无限循环脚本
while True:
get_pid = get_process()#获得现在所有的进程数据
for i in get_pid:
son_pid = int(i)#获得当前进程,也就是子进程
#使用try、except来代替if else进行操作,其原因在于,很有可能你在查询当前进程的时候,进程已经结束了(某些系统进程)
try:
son_process = psutil.Process(son_pid)#通过子进程的pid来获得指定进程
son_name = son_process.name()#获得子进程名称
if (son_name == 'chrome.exe') or (son_name == 'chromedriver.exe'):#判断是否时chrom浏览器类型,不是则忽略掉该son_pid
fath_pid=re.findall('pid=(.*?),',str(son_process.parent())#通过子进程来获取父进程,并进行一定处理,得到父进程的pid
try:
fath_process=psutil.Process(int(fath_pid[0]))#通过父进程pid来获得指定父进程,如果父进程pid不存在,那么就会报错
except:
#调用python的os模块,来进行cmd操作
cmd = 'taskkill /pid'+' '+str(son_pid)+' '+'/f'#windows杀死进程命令,根据进程pid
os.system(cmd)
else: