summaryrefslogtreecommitdiffstats
path: root/scripts/qemuimage-testlib-pythonhelper
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qemuimage-testlib-pythonhelper')
-rwxr-xr-xscripts/qemuimage-testlib-pythonhelper61
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/qemuimage-testlib-pythonhelper b/scripts/qemuimage-testlib-pythonhelper
new file mode 100755
index 0000000000..2ca61ca06a
--- /dev/null
+++ b/scripts/qemuimage-testlib-pythonhelper
@@ -0,0 +1,61 @@
1#!/usr/bin/env python
2
3import optparse
4import subprocess
5import sys
6
7parser = optparse.OptionParser(
8 usage = """
9 %prog [options]
10""")
11
12parser.add_option("-q", "--findqemu",
13 help = "find a qemu beneath the process <pid>",
14 action="store", dest="findqemu")
15
16options, args = parser.parse_args(sys.argv)
17
18if options.findqemu:
19 #
20 # Walk the process tree from the process specified looking for a qemu-system. Return its pid.
21 #
22 ps = subprocess.Popen(['ps', 'ax', '-o', 'pid,ppid,command'], stdout=subprocess.PIPE).communicate()[0]
23 processes = ps.split('\n')
24 nfields = len(processes[0].split()) - 1
25 pids = {}
26 commands = {}
27 for row in processes[1:]:
28 data = row.split(None, nfields)
29 if len(data) != 3:
30 continue
31 if data[1] not in pids:
32 pids[data[1]] = []
33 pids[data[1]].append(data[0])
34 commands[data[0]] = data[2]
35
36 if options.findqemu not in pids:
37 print "No children found matching %s" % options.findqemu
38 sys.exit(1)
39
40 parents = []
41 newparents = pids[options.findqemu]
42 while newparents:
43 next = []
44 for p in newparents:
45 if p in pids:
46 for n in pids[p]:
47 if n not in parents and n not in next:
48 next.append(n)
49
50 if p not in parents:
51 parents.append(p)
52 newparents = next
53 #print "Children matching %s:" % str(parents)
54 for p in parents:
55 if "qemu-system" in commands[p]:
56 print p
57 sys.exit(0)
58 sys.exit(1)
59else:
60 parser.print_help()
61