why and how to run forever and debug when error in for proc in psutil.process_iter()?

Ho Yeung Lee jobmattcon at gmail.com
Sun Mar 26 07:32:02 EDT 2017


On Sunday, March 26, 2017 at 10:33:51 AM UTC+8, Deborah Swanson wrote:
> Someone here can probably help you, but they'll need your Python
> version, operating system, and full traceback. They get tired of saying
> so. 
> 
> In this case, the full traceback is needed to see what went wrong and
> when (after which statements).
> 
> 
> Ho Yeung Lee wrote, on Saturday, March 25, 2017 1:38 AM
> > 
> > expect below to run forever and keep running a fixed number 
> > of thread in python
> > 
> > would like to kill tasks when process connect internet except 
> > chrome and explorer.exe
> > 
> > i do this because MalwareBytes can not disconnect these 
> > existing trojan when my notebook connect internet
> > 
> > after run a few minutes, the program stopped, but i have 
> > already kept create process, why the whole program end?
> > 
> > why and how to debug when error in for proc in psutil.process_iter()?
> > 
> > 
> > import os
> > import psutil
> > import multiprocessing
> > import time
> > import sys
> > 
> > def cleantask():
> >     p = os.popen("netstat -ano")
> >     while 1:
> >         line = p.readline()
> >         if "TCP" in line or "UDP" in line:
> >             linelist = line.split()
> >             if len(linelist) > 4:
> >                 if "LISTEN" in str(linelist[3]):
> >                     for proc in psutil.process_iter():
> >                         try:
> >                             if "pop" not in str(proc.name).tolower():
> >                                 os.system("taskkill /f /pid 
> > "+str(proc._pid))
> >                         except:
> >                             dummy = 1
> >                             #print "Unexpected error:", 
> > sys.exc_info()[0]
> >                             #print "Unexpected error:", 
> > sys.exc_info()[1]
> >                 if "ESTABLISHED" in str(linelist[3]):
> >                     if "127.0.0.1" not in str(linelist[2]):
> >                         for proc in psutil.process_iter():
> >                             try:
> >                                 if str(linelist[4]) in 
> > str(proc._pid):            
> >                                     
> > print(str(linelist[2])+","+str(linelist[4])+","+proc.name)
> >                                 if "111.221" not in 
> > str(linelist[2]) and "explorer.exe" not in str(proc.name).tolower():
> >                                     os.system("taskkill /f 
> > /pid "+str(proc._pid))
> >                             except:
> >                                 dummy = 1
> >                                 #print "Unexpected error:", 
> > sys.exc_info()[0]
> >                                 #print "Unexpected error:", 
> > sys.exc_info()[1]
> >                         print(line)
> >         if not line: break
> > 
> > if __name__ == '__main__':
> >     print("main")
> >     try:
> >         numberofrunning = 0
> >         plist = []
> >         for ii in range(0,5):  
> >             p = multiprocessing.Process(target=cleantask(), args=(0,))
> >             p.start()
> >             plist.append(p)
> >             numberofrunning = numberofrunning + 1
> >             time.sleep(1)
> >         for pp in plist:
> >             pp.join()
> >      	    if pp.is_alive() == False:
> >                 numberofrunning = numberofrunning - 1
> >                 plist.remove(pp)
> >             if numberofrunning > 10:
> >                 print "more than 10 process"
> >             else:
> >                 print("number of process = " + str(numberofrunning))
> >                 if numberofrunning <= 5:
> >                     p = 
> > multiprocessing.Process(target=cleantask(), args=(0,))
> >                     p.start()
> >                     plist.append(p)
> >                     numberofrunning = numberofrunning + 1
> >                     time.sleep(1)
> >     except:
> >         print "Unexpected error:", sys.exc_info()[0]
> >         print "Unexpected error:", sys.exc_info()[1]
> > -- 
> > https://mail.python.org/mailman/listinfo/python-list
> >

after window update error, I can not login window and reset system and
reinstall every thing

python 2.7.12

there is no error when run, but it end after running a few minutes
if commend the forever loop in main

import os
import psutil
import multiprocessing
import time
import sys

def cleantask():
    bufsize = 0
    f = open("d:\\killlist.txt",'a',bufsize)
    p = os.popen("netstat -ano")
    while 1:
        line = p.readline()
        if "TCP" in line or "UDP" in line:
            linelist = line.split()
            if len(linelist) > 4:
                if "LISTEN" in str(linelist[3]):
                    for proc in psutil.process_iter():
                        try:
                            if "pop" in str(proc.name).lower():
                                os.system("taskkill /f /pid "+str(proc._pid))
                                #print("here8")
                                print(str(linelist[2])+","+str(linelist[4])+","+proc.name +" is killed ")
                                #print("here9")
                                path = proc.exe()
                                print(str(linelist[2])+","+str(linelist[4])+","+proc.name +" at " + str(path))
                                #print("here10")
                        except:
                            dummy = 1
                            #print "Unexpected error:", sys.exc_info()[0]
                            #print "Unexpected error:", sys.exc_info()[1]
                if "ESTAB" in str(linelist[3]):
                    if "127.0.0.1" not in str(linelist[2]):
                        for proc in psutil.process_iter():
                            try:
                                if str(linelist[4]) in str(proc._pid):            
                                    #print("here1a")
                                    print(str(linelist[2])+","+str(linelist[4])+","+str(proc.name))
                                    #print("here2a")
                                    #print(str(linelist[2])+","+str(linelist[4])+","+proc.name)

                                #print("here3a")
                                if "111.221" in str(linelist[2]):
                                    dummy = 1
                                elif "explorer.exe" in str(proc.name).lower():
                                    dummy = 1
                                elif "svchost" in str(proc.name).lower():
                                    dummy = 1
                                elif "cmd" in str(proc.name).lower():
                                    dummy = 1
                                else:
                                    os.system("taskkill /pid "+str(proc._pid))
                                    #print("here1")
                                    print(str(linelist[2])+","+str(linelist[4])+","+str(proc.name) +" is killed ")
                                    #print("here2")
                                    path = proc.exe()
                                    print(str(linelist[2])+","+str(linelist[4])+","+str(proc.name) +" at " + str(path))
                                    #print("here3")
                                    f.write(str(linelist[2])+","+str(linelist[4])+","+str(proc.name) +" at " + str(path) +"\n")
                            except:
                                dummy = 1
                                print "Unexpected error:", sys.exc_info()[0]
                                print "Unexpected error:", sys.exc_info()[1]
                                #print("here6")
                                f.write(str(linelist[2])+","+str(linelist[4])+","+str(proc.name) +" can not kill at " + str(path) +"\n")
                                #print("here7")
                                f.flush()
                        print(line)
        if not line: break
    f.close()


if __name__ == '__main__':
    print("main")
    #while 1:
        try:
            numberofrunning = 0
            plist = []
            for ii in range(0,100):  
                p = multiprocessing.Process(target=cleantask(), args=(0,))
                p.start()
                plist.append(p)
                numberofrunning = numberofrunning + 1
                time.sleep(1)
            for pp in plist:
                pp.join()
     	        if pp.is_alive() == False:
                    numberofrunning = numberofrunning - 1
                    plist.remove(pp)
                if numberofrunning > 100:
                    print "more than 100 process"
                else:
                    print("number of process = " + str(numberofrunning))
                    if numberofrunning <= 90:
                        p = multiprocessing.Process(target=cleantask(), args=(0,))
                        p.start()
                        plist.append(p)
                        numberofrunning = numberofrunning + 1
                        time.sleep(1)
        except:
            print "Unexpected error:", sys.exc_info()[0]
            print "Unexpected error:", sys.exc_info()[1]




More information about the Python-list mailing list