Rev | Line | |
---|
[1066] | 1 | #!/usr/bin/python
|
---|
| 2 |
|
---|
| 3 | import sys
|
---|
| 4 | import time
|
---|
| 5 |
|
---|
| 6 | pids={}
|
---|
| 7 |
|
---|
| 8 | def parse_execve(syscall):
|
---|
| 9 | i=syscall.find('"')
|
---|
| 10 | if i<0:
|
---|
| 11 | return None
|
---|
| 12 | name=syscall[i+1:]
|
---|
| 13 | i=name.find('"')
|
---|
| 14 | if i<0:
|
---|
| 15 | return None
|
---|
| 16 | name=name[:i]
|
---|
| 17 | return name
|
---|
| 18 |
|
---|
| 19 | def parse_exit(syscall):
|
---|
| 20 | i=syscall.find(',')
|
---|
| 21 | retcode=syscall[len('_exit('):i]
|
---|
| 22 | return retcode
|
---|
| 23 |
|
---|
| 24 | def parse_waitpid(syscall):
|
---|
| 25 | i=syscall.rfind('=')
|
---|
| 26 | if i<0:
|
---|
| 27 | return None
|
---|
| 28 | else:
|
---|
| 29 | pid=syscall[i+1:].strip()
|
---|
| 30 | pid=pid.split(' ')[0]
|
---|
| 31 | return pid
|
---|
| 32 |
|
---|
| 33 | def process_syscall(pid,t,syscall):
|
---|
| 34 | if syscall.startswith('execve') and not "ENOENT" in syscall:
|
---|
| 35 | name=parse_execve(syscall)
|
---|
| 36 | i=name.rfind('/')
|
---|
| 37 | if i>0:
|
---|
| 38 | name=name[i+1:]
|
---|
| 39 | pids[pid]=[ name,t ]
|
---|
| 40 | elif syscall.startswith('_exit'):
|
---|
| 41 | if pids.has_key(pid):
|
---|
| 42 | name,start=pids[pid]
|
---|
| 43 | pids[pid]=[ name,start,t ]
|
---|
| 44 | elif 'waitpid' in syscall:
|
---|
| 45 | pid=parse_waitpid(syscall)
|
---|
| 46 | if pids.has_key(pid):
|
---|
| 47 | name,start=pids[pid]
|
---|
| 48 | pids[pid]=[ name,start,t]
|
---|
| 49 |
|
---|
| 50 | if __name__=="__main__":
|
---|
| 51 | for l in sys.stdin.readlines():
|
---|
| 52 | parts=l.split(" ")
|
---|
| 53 | pid=parts[0]
|
---|
| 54 | t=parts[1]
|
---|
| 55 | syscall=''.join(parts[2:])
|
---|
| 56 |
|
---|
| 57 | process_syscall(pid,t,syscall)
|
---|
| 58 |
|
---|
| 59 |
|
---|
| 60 | for p in sorted(pids):
|
---|
| 61 | tup=pids[p]
|
---|
| 62 | if len(tup)==2:
|
---|
| 63 | name,start=tup
|
---|
| 64 | print name+"*",start,start
|
---|
| 65 | else:
|
---|
| 66 | name,start,end=tup
|
---|
| 67 | print name,start,end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.