[tor-commits] [stem/master] Adding BSD compatability to system.is_running

atagar at torproject.org atagar at torproject.org
Mon Oct 17 02:33:38 UTC 2011


commit 3731bba464e22dc5501b7b9ae62c29ebc34ad7ba
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Oct 16 17:27:57 2011 -0700

    Adding BSD compatability to system.is_running
    
    Copying over an arm fix I made earlier this week from
    util.torTools.isTorRunning so that it would work on OSX/FreeBSD/OpenBSD.
---
 stem/util/system.py |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/stem/util/system.py b/stem/util/system.py
index 3c520e8..bdada9b 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -61,7 +61,27 @@ def is_running(command, suppress_exc = True):
     OSError if this can't be determined and suppress_exc is False
   """
   
-  command_listing = call("ps -A co command")
+  # Linux and the BSD families have different variants of ps. Guess based on
+  # os.uname() results which to try first, then fall back to the other.
+  #
+  # Linux
+  #   -A          - Select all processes. Identical to -e.
+  #   -co command - Shows just the base command.
+  #
+  # Mac / BSD
+  #   -a        - Display information about other users' processes as well as
+  #               your own.
+  #   -o ucomm= - Shows just the ucomm attribute ("name to be used for
+  #               accounting")
+  
+  primary_resolver, secondary_resolver = "ps -A co command", "ps -ao ucomm="
+  
+  if os.uname()[0] in ("Darwin", "FreeBSD", "OpenBSD"):
+    primary_resolver, secondary_resolver = secondary_resolver, primary_resolver
+  
+  command_listing = call(primary_resolver)
+  if not command_listing:
+    command_listing = call(secondary_resolver)
   
   if command_listing:
     return command in command_listing





More information about the tor-commits mailing list