mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00

Old versions of ldd (2.11) as run on some of the autobuilders end up running commands like "LD_xxxx qemu-system-xxx" which this process detection code would pick up and result in the wrong PID for qemu. This changes the code to check for "192.168" in the command so we know we're getting the correct one. This is less than ideal however we're running out of options and resolves false negatives we see on the autobuilder. (From OE-Core rev: 7b43151bb073f1f6f1fa5a31447b742127060909) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
67 lines
1.9 KiB
Python
Executable File
67 lines
1.9 KiB
Python
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 <pid>",
|
|
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"
|
|
# Also, old versions of ldd (2.11) run "LD_XXXX qemu-system-xxxx"
|
|
basecmd = commands[p].split()[0]
|
|
basecmd = os.path.basename(basecmd)
|
|
if "qemu-system" in basecmd and "192.168" in commands[p]:
|
|
print p
|
|
sys.exit(0)
|
|
sys.exit(1)
|
|
else:
|
|
parser.print_help()
|
|
|