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 |
+ * |