| Index: third_party/mozprocess/mozprocess/pid.py
|
| ===================================================================
|
| --- third_party/mozprocess/mozprocess/pid.py (revision 0)
|
| +++ third_party/mozprocess/mozprocess/pid.py (revision 0)
|
| @@ -0,0 +1,82 @@
|
| +#!/usr/bin/env python
|
| +
|
| +# This Source Code Form is subject to the terms of the Mozilla Public
|
| +# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
| +# You can obtain one at http://mozilla.org/MPL/2.0/.
|
| +
|
| +import os
|
| +import mozinfo
|
| +import shlex
|
| +import subprocess
|
| +import sys
|
| +
|
| +# determine the platform-specific invocation of `ps`
|
| +if mozinfo.isMac:
|
| + psarg = '-Acj'
|
| +elif mozinfo.isLinux:
|
| + psarg = 'axwww'
|
| +else:
|
| + psarg = 'ax'
|
| +
|
| +def ps(arg=psarg):
|
| + """
|
| + python front-end to `ps`
|
| + http://en.wikipedia.org/wiki/Ps_%28Unix%29
|
| + returns a list of process dicts based on the `ps` header
|
| + """
|
| + retval = []
|
| + process = subprocess.Popen(['ps', arg], stdout=subprocess.PIPE)
|
| + stdout, _ = process.communicate()
|
| + header = None
|
| + for line in stdout.splitlines():
|
| + line = line.strip()
|
| + if header is None:
|
| + # first line is the header
|
| + header = line.split()
|
| + continue
|
| + split = line.split(None, len(header)-1)
|
| + process_dict = dict(zip(header, split))
|
| + retval.append(process_dict)
|
| + return retval
|
| +
|
| +def running_processes(name, psarg=psarg, defunct=True):
|
| + """
|
| + returns a list of
|
| + {'PID': PID of process (int)
|
| + 'command': command line of process (list)}
|
| + with the executable named `name`.
|
| + - defunct: whether to return defunct processes
|
| + """
|
| + retval = []
|
| + for process in ps(psarg):
|
| + command = process['COMMAND']
|
| + command = shlex.split(command)
|
| + if command[-1] == '<defunct>':
|
| + command = command[:-1]
|
| + if not command or not defunct:
|
| + continue
|
| + if 'STAT' in process and not defunct:
|
| + if process['STAT'] == 'Z+':
|
| + continue
|
| + prog = command[0]
|
| + basename = os.path.basename(prog)
|
| + if basename == name:
|
| + retval.append((int(process['PID']), command))
|
| + return retval
|
| +
|
| +def get_pids(name):
|
| + """Get all the pids matching name"""
|
| +
|
| + if mozinfo.isWin:
|
| + # use the windows-specific implementation
|
| + import wpk
|
| + return wpk.get_pids(name)
|
| + else:
|
| + return [pid for pid,_ in running_processes(name)]
|
| +
|
| +if __name__ == '__main__':
|
| + pids = set()
|
| + for i in sys.argv[1:]:
|
| + pids.update(get_pids(i))
|
| + for i in sorted(pids):
|
| + print i
|
|
|
| Property changes on: third_party/mozprocess/mozprocess/pid.py
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
| Added: svn:executable
|
| + *
|
|
|
|
|