
runqemu-internal runs "ldd qemu-system xxx" and the detection code was returning this as the PID of qemu. This patch improves the detection code to avoid this problem, fixing certain race type failures on the autobuilder. (From OE-Core rev: fc914a6fb3204f8b5bdfc0f56364606673d5356a) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
1.8 KiB
Executable File
#!/usr/bin/env python
import optparse import subprocess import sys import os
parser = optparse.OptionParser( usage = """ %prog [options] """)
parser.add_option("-q", "--findqemu", help = "find a qemu beneath the process ", action="store", dest="findqemu")
options, args = parser.parse_args(sys.argv)
if options.findqemu: # # Walk the process tree from the process specified looking for a qemu-system. Return its pid. # ps = subprocess.Popen(['ps', 'axww', '-o', 'pid,ppid,command'], stdout=subprocess.PIPE).communicate()[0] processes = ps.split('\n') nfields = len(processes[0].split()) - 1 pids = {} commands = {} for row in processes[1:]: data = row.split(None, nfields) if len(data) != 3: continue if data[1] not in pids: pids[data[1]] = [] pids[data[1]].append(data[0]) commands[data[0]] = data[2]
if options.findqemu not in pids:
sys.stderr.write("No children found matching %s" % options.findqemu)
sys.exit(1)
parents = []
newparents = pids[options.findqemu]
while newparents:
next = []
for p in newparents:
if p in pids:
for n in pids[p]:
if n not in parents and n not in next:
next.append(n)
if p not in parents:
parents.append(p)
newparents = next
#print "Children matching %s:" % str(parents)
for p in parents:
# Need to be careful here since runqemu-internal runs "ldd qemu-system-xxxx"
basecmd = commands[p].split()[0]
basecmd = os.path.basename(basecmd)
if "qemu-system" in basecmd:
print p
sys.exit(0)
sys.exit(1)
else: parser.print_help()