| Index: tools/telemetry/telemetry/internal/util/ps_util.py
|
| diff --git a/tools/telemetry/telemetry/internal/util/ps_util.py b/tools/telemetry/telemetry/internal/util/ps_util.py
|
| deleted file mode 100644
|
| index 41597ddb34235bbb52848b4d102ed36d7562055e..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/util/ps_util.py
|
| +++ /dev/null
|
| @@ -1,87 +0,0 @@
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import atexit
|
| -import inspect
|
| -import logging
|
| -import os
|
| -
|
| -from collections import defaultdict
|
| -
|
| -
|
| -def GetChildPids(processes, pid):
|
| - """Returns all child processes of |pid| from the given |processes| list.
|
| -
|
| - Args:
|
| - processes: A tuple of (pid, ppid, state) as generated by ps.
|
| - pid: The pid for which to get children.
|
| -
|
| - Returns:
|
| - A list of child pids.
|
| - """
|
| - child_dict = defaultdict(list)
|
| - for curr_pid, curr_ppid, state in processes:
|
| - if 'Z' in state:
|
| - continue # Ignore zombie processes
|
| - child_dict[int(curr_ppid)].append(int(curr_pid))
|
| - queue = [pid]
|
| - child_ids = []
|
| - while queue:
|
| - parent = queue.pop()
|
| - if parent in child_dict:
|
| - children = child_dict[parent]
|
| - queue.extend(children)
|
| - child_ids.extend(children)
|
| - return child_ids
|
| -
|
| -
|
| -def GetPsOutputWithPlatformBackend(platform_backend, columns, pid):
|
| - """Returns output of the 'ps' command as a list of lines.
|
| -
|
| - Args:
|
| - platform_backend: The platform backend (LinuxBasedPlatformBackend or
|
| - PosixPlatformBackend).
|
| - columns: A list of require columns, e.g., ['pid', 'pss'].
|
| - pid: If not None, returns only the information of the process with the pid.
|
| - """
|
| - args = ['ps']
|
| - args.extend(['-p', str(pid)] if pid != None else ['-e'])
|
| - for c in columns:
|
| - args.extend(['-o', c + '='])
|
| - return platform_backend.RunCommand(args).splitlines()
|
| -
|
| -
|
| -def EnableListingStrayProcessesUponExitHook():
|
| - def _ListAllSubprocesses():
|
| - try:
|
| - import psutil
|
| - except ImportError:
|
| - logging.error(
|
| - 'psutil is not installed on the system. Not listing possible '
|
| - 'leaked processes. To install psutil, see: '
|
| - 'https://pypi.python.org/pypi/psutil')
|
| - return
|
| - telemetry_pid = os.getpid()
|
| - parent = psutil.Process(telemetry_pid)
|
| - if hasattr(parent, 'children'):
|
| - children = parent.children(recursive=True)
|
| - else: # Some old version of psutil use get_children instead children.
|
| - children = parent.get_children()
|
| - if children:
|
| - leak_processes_info = []
|
| - for p in children:
|
| - if inspect.ismethod(p.name):
|
| - name = p.name()
|
| - else: # Process.name is a property in old versions of psutil.
|
| - name = p.name
|
| - process_info = '%s (%s)' % (name, p.pid)
|
| - try:
|
| - process_info += ' - %s' % p.cmdline()
|
| - except Exception as e:
|
| - logging.warning(str(e))
|
| - leak_processes_info.append(process_info)
|
| - logging.error('Telemetry leaks these processes: %s',
|
| - ', '.join(leak_processes_info))
|
| -
|
| - atexit.register(_ListAllSubprocesses)
|
|
|