#!/usr/bin/evn python# -*- coding:utf-8 -*-#Author = 'Jun'"""可以同时监控多个进程"""import sysimport reimport osimport linecachetry:    import psutilexcept ImportError as e:    print e    sys.exit()def process(processname):    plist = []    getplist = psutil.process_iter()    for pro in getplist:        p = str(pro)        re1 = re.compile(processname, re.I)        if re1.search(p):            plist.append(str(p).split('pid=')[1].split(',')[0])    return plistdef file_size_check(logfile):    if os.path.isfile(logfile):        if os.path.getsize(logfile) > 2700000:            f = open(logfile, 'w')            f.write("")            f.close()def main(pname, filename, pnumber=1):    readline = pnumber * 2    logfile = os.path.dirname(os.path.realpath(__file__)) + os.sep + filename    file_size_check(logfile)    pidlist = process(pname)    chpidlist = []    lines = linecache.getlines(logfile)[-readline:]    taillines = [line.strip('\n') for line in lines]    pl = [p for p in pidlist if taillines.count(p) == 2]    f = open(logfile, 'a')    if len(taillines) < readline:        print "check log less than %s line" % readline        [f.write(p + '\n') for p in pidlist]        f.close()        sys.exit(0)    elif len(pl) == pnumber:        print "check %s process ok, pidis :" % pname, pidlist        [f.write(p + '\n') for p in pidlist]        f.close()        sys.exit(0)    else:        for p in pidlist:            if taillines.count(p) != 2:                chpidlist.append(p)        print "check %s process is change, change pid is :::" % pname, chpidlist        [f.write(p + '\n') for p in pidlist]        f.close()        sys.exit(1)if __name__ == '__main__':    if len(sys.argv) == 3:        proname = sys.argv[1]        pnum = int(sys.argv[2])        logf = "check_%s_pid" % proname        main(proname, logf, pnum)    elif len(sys.argv) == 2:        proname = sys.argv[1]        logf = "check_%s_pid" % proname        main(proname, logf)    else:        print "Usage:%s processname [processnumber] " % sys.argv[0]        sys.exit(2)