commit 6176b9a87c8a4d8ca3f60f953d2d8ca9e276813f Author: Damian Johnson atagar@torproject.org Date: Mon Sep 2 13:23:39 2013 -0700
Dropping arm.util.system.getProcessName()
Replacing this bit of functionality with a stem function named get_name_by_pid(). Actually, we weren't using this function's caching nor exceptions which was silly. Oh, and the ps command we ran had a bug so it was busted when the process had arguments. Go me. --- arm/controller.py | 8 ++++++-- arm/util/sysTools.py | 50 -------------------------------------------------- 2 files changed, 6 insertions(+), 52 deletions(-)
diff --git a/arm/controller.py b/arm/controller.py index 71d6adc..f6a1f6e 100644 --- a/arm/controller.py +++ b/arm/controller.py @@ -25,7 +25,7 @@ from stem.control import State, Controller
from arm.util import connections, hostnames, panel, sysTools, torConfig, torTools
-from stem.util import conf, enum, log +from stem.util import conf, enum, log, system
ARM_CONTROLLER = None
@@ -546,7 +546,11 @@ def startTorMonitor(startTime):
if torPid: # use the tor pid to help narrow connection results - torCmdName = sysTools.getProcessName(torPid, "tor") + torCmdName = system.get_name_by_pid(torPid) + + if torCmdName is None: + torCmdName = "tor" + connections.getResolver(torCmdName, torPid, "tor") else: # constructs singleton resolver and, if tor isn't connected, initizes diff --git a/arm/util/sysTools.py b/arm/util/sysTools.py index af38ced..3763826 100644 --- a/arm/util/sysTools.py +++ b/arm/util/sysTools.py @@ -8,7 +8,6 @@ import threading
from stem.util import conf, log, proc, str_tools, system
-PROCESS_NAME_CACHE = {} # mapping of pids to their process names RESOURCE_TRACKERS = {} # mapping of pids to their resource tracker instances
# Runtimes for system calls, used to estimate cpu usage. Entries are tuples of @@ -61,55 +60,6 @@ def getFileErrorMsg(exc):
return excStr
-def getProcessName(pid, default = None, cacheFailure = True): - """ - Provides the name associated with the given process id. This isn't available - on all platforms. - - Arguments: - pid - process id for the process being returned - default - result if the process name can't be retrieved (raises an - IOError on failure instead if undefined) - cacheFailure - if the lookup fails and there's a default then caches the - default value to prevent further lookups - """ - - if pid in PROCESS_NAME_CACHE: - return PROCESS_NAME_CACHE[pid] - - processName, raisedExc = "", None - - # fetch it from proc contents if available - if proc.is_available(): - try: - processName = proc.get_stats(pid, proc.Stat.COMMAND)[0] - except IOError, exc: - raisedExc = exc - - # fall back to querying via ps - if not processName: - # the ps call formats results as: - # COMMAND - # tor - psCall = system.call("ps -p %s -o command" % pid) - - if psCall and len(psCall) >= 2 and not " " in psCall[1]: - processName, raisedExc = psCall[1].strip(), None - else: - raisedExc = ValueError("Unexpected output from ps: %s" % psCall) - - if raisedExc: - if default == None: raise raisedExc - else: - if cacheFailure: - PROCESS_NAME_CACHE[pid] = default - - return default - else: - processName = os.path.basename(processName) - PROCESS_NAME_CACHE[pid] = processName - return processName - def getResourceTracker(pid, noSpawn = False): """ Provides a running singleton ResourceTracker instance for the given pid.