[tor-commits] [arm/release] Determining initial cmd with ctypes rather than ps

atagar at torproject.org atagar at torproject.org
Sun Jul 17 06:08:18 UTC 2011


commit 175fde6c4a92e1b52f060ef82baf35bf7d722639
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon May 2 21:28:54 2011 -0700

    Determining initial cmd with ctypes rather than ps
    
    Using the ctypes argv rather than querying for our command via ps (thanks to
    ioerror).
---
 src/util/procname.py |   28 +++++++++++-----------------
 1 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/src/util/procname.py b/src/util/procname.py
index 14a82b8..97dc707 100644
--- a/src/util/procname.py
+++ b/src/util/procname.py
@@ -9,13 +9,10 @@
 # argument replacement (ie, replace argv[0], argv[1], etc but with a string
 # the same size).
 
-import os
 import sys
 import ctypes
 import ctypes.util
 
-from util import sysTools
-
 # flag for setting the process name, found in '/usr/include/linux/prctl.h'
 PR_SET_NAME = 15
 
@@ -65,24 +62,21 @@ def _setArgv(processName):
   if currentProcessName == None:
     # Getting argv via...
     # currentProcessName = " ".join(["python"] + sys.argv)
-    #
+    # 
     # doesn't do the trick since this will miss interpretor arguments like...
     # python -W ignore::DeprecationWarning myScript.py
     # 
-    # hence simply getting an outside opinion of our command.
-    
-    psResults = sysTools.call("ps -p %i -o args" % os.getpid())
+    # Hence we're fetching this via our ctypes argv. Alternatively we could
+    # use ps, though this is less desirable:
+    # "ps -p %i -o args" % os.getpid()
     
-    if len(psResults) == 2:
-      # output looks like:
-      # COMMAND
-      # python ./src/starter.py
-      
-      currentProcessName = psResults[1]
-      maxNameLength = len(currentProcessName)
+    args = []
+    for i in range(100):
+      if argc[i] == None: break
+      args.append(str(argc[i]))
     
-    if not currentProcessName:
-      raise IOError("unable to determine our process name")
+    currentProcessName = " ".join(args)
+    maxNameLength = len(currentProcessName)
   
   if len(processName) > maxNameLength:
     msg = "can't rename process to something longer than our initial name since this would overwrite memory used for the env"
@@ -93,7 +87,7 @@ def _setArgv(processName):
   
   ctypes.memset(argc.contents, 0, zeroSize + 1) # null terminate the string's end
   ctypes.memmove(argc.contents, processName, len(processName))
-  currentProcessName = processName[:MAX_CHAR]
+  currentProcessName = processName
 
 def _setPrctlName(processName):
   """





More information about the tor-commits mailing list