相关文章推荐
python项目已经停止,子进程仍在运行

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:
 
推荐文章