Mercurial > hg > config
comparison python/process.py @ 180:f52486ceadee
handle defunct processes
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 08 Nov 2011 17:11:35 -0800 |
parents | a5061b41a781 |
children | f9863f733344 |
comparison
equal
deleted
inserted
replaced
179:a5061b41a781 | 180:f52486ceadee |
---|---|
2 import shlex | 2 import shlex |
3 import subprocess | 3 import subprocess |
4 import sys | 4 import sys |
5 | 5 |
6 def ps(arg='axwww'): | 6 def ps(arg='axwww'): |
7 """ | |
8 python front-end to `ps` | |
9 http://en.wikipedia.org/wiki/Ps_%28Unix%29 | |
10 returns a list of process dicts based on the `ps` header | |
11 """ | |
7 retval = [] | 12 retval = [] |
8 process = subprocess.Popen(['ps', arg], stdout=subprocess.PIPE) | 13 process = subprocess.Popen(['ps', arg], stdout=subprocess.PIPE) |
9 stdout, _ = process.communicate() | 14 stdout, _ = process.communicate() |
10 header = None | 15 header = None |
11 for line in stdout.splitlines(): | 16 for line in stdout.splitlines(): |
17 split = line.split(None, len(header)-1) | 22 split = line.split(None, len(header)-1) |
18 process_dict = dict(zip(header, split)) | 23 process_dict = dict(zip(header, split)) |
19 retval.append(process_dict) | 24 retval.append(process_dict) |
20 return retval | 25 return retval |
21 | 26 |
22 def running_processes(name): | 27 def running_processes(name, defunct=True): |
23 """ | 28 """ |
24 returns a list of | 29 returns a list of |
25 {'PID': PID of process (int) | 30 {'PID': PID of process (int) |
26 'command': command line of process (list)} | 31 'command': command line of process (list)} |
27 with the executable named `name` | 32 with the executable named `name`. |
33 - defunct: whether to return defunct processes | |
28 """ | 34 """ |
29 retval = [] | 35 retval = [] |
30 for process in ps(): | 36 for process in ps(): |
31 command = process['COMMAND'] | 37 command = process['COMMAND'] |
32 command = shlex.split(command) | 38 command = shlex.split(command) |
39 if command[-1] == '<defunct>': | |
40 command = command[:-1] | |
41 if not command or not defunct: | |
42 continue | |
33 prog = command[0] | 43 prog = command[0] |
34 basename = os.path.basename(prog) | 44 basename = os.path.basename(prog) |
35 if basename == name: | 45 if basename == name: |
36 retval.append((int(process['PID']), command)) | 46 retval.append((int(process['PID']), command)) |
37 return retval | 47 return retval |