
复制#!/usr/bin/python             # Monitoring per-process disk I/O activity             # written by http://www.vpsee.com              import sys,何监 os, time, signal, re              class DiskIO:              def __init__(self, pname=None, pid=None, reads=0, writes=0):              self.pname = pname              self.pid = pid              self.reads = 0            self.writes = 0            def main():                  argc = len(sys.argv)              if argc != 1:              print"usage: ./iotop"                    sys.exit(0)              if os.getuid() != 0:              print"must be run as root"                    sys.exit(0)                  signal.signal(signal.SIGINT, signal_handler)                  os.system(echo 1 > /proc/sys/vm/block_dump)              print"TASK              PID       READ      WRITE"            whileTrue:                      os.system(dmesg -c > /tmp/diskio.log)                      l = []                      f = open(/tmp/diskio.log, r)                      line = f.readline()              while line:                          m = re.match(\              ^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+), line)              if m != None:              ifnot l:                                  l.append(DiskIO(m.group(1), m.group(2)))                                  line = f.readline()              continue                            found = False            for item in l:              if item.pid == m.group(2):                                      found = True            if m.group(3) == "READ":                                          item.reads = item.reads + 1            elif m.group(3) == "WRITE":                                          item.writes = item.writes + 1            ifnot found:                                  l.append(DiskIO(m.group(1), m.group(2)))                          line = f.readline()                      time.sleep(1)              for item in l:              print"%-10s %10s %10d %10d" % \                              (item.pname, item.pid, item.reads, item.writes)              def signal_handler(signal, frame):                  os.system(echo 0 > /proc/sys/vm/block_dump)                  sys.exit(0)              if __name__=="__main__":                  main()              1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.