[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone4-368-g700ab82

Michael 'Mickey' Lauer mickey at vanille-media.de
Mon Feb 2 18:51:29 UTC 2009


The following commit has been merged in the master branch:
commit 3b8acea059040ef8794bfbb63c1a0787e71df273
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date:   Tue Dec 2 19:53:09 2008 +0100

    ogsmd: improve killall function, patch courtesy sdhillon. closes FSO ticket #260

diff --git a/framework/subsystems/ogsmd/helpers.py b/framework/subsystems/ogsmd/helpers.py
index 31a3e68..257a17c 100644
--- a/framework/subsystems/ogsmd/helpers.py
+++ b/framework/subsystems/ogsmd/helpers.py
@@ -111,20 +111,42 @@ class BiDict( object ):
 
 #=========================================================================#
 def processIterator():
+#=========================================================================#        
+    for entry in os.listdir( "/proc" ): 
+        fileName = os.path.join( "/proc", entry, "cmdline" )
+        if os.access( fileName, os.R_OK ):
+            cmdline = file( fileName ).read()
+            executablePath = cmdline.split("\x00")[0]
+            executableName = executablePath.split(os.path.sep)[-1]
+            #entry = pid, cmdline = cmdline file contents
+            yield (entry, cmdline, executablePath, executableName) 
+
 #=========================================================================#
-    for entry in os.listdir( "/proc" ):
-        try:
-            pid = int( entry )
-        except ValueError:
-            continue
-        else:
-            name = open( "/proc/%s/cmdline" % pid ).read().split( '\0' )[0]
-            yield name, pid
+def processFinder(nameToFind, matchType):
+#=========================================================================#
+    for entry, cmdline, executablePath, executableName in processIterator():
+        if matchType == "posix":
+            if executableName == nameToFind:
+                yield int( entry )
+        elif matchType == "weak":
+            if executablePath.find( nameToFind ) != -1:
+                yield int( entry )
+        elif matchType == "reallyweak":
+            if cmdline.find( nameToFind ) != -1:
+                yield int( entry )
 
 #=========================================================================#
-def killall( nameToKill ):
+def killall( nameToKill, matchType="posix", killSignal=signal.SIGTERM ):
 #=========================================================================#
-    [ os.kill( pid, signal.SIGTERM ) for name, pid in processIterator() if name == nameToKill ]
+    killedPids = []
+    for pid in processFinder( nameToKill, matchType ):
+        try:
+            os.kill( pid, killSignal )
+        except OSError: # permission denied/bad signal/etc...
+            pass
+        else:
+            killedPids.append( pid )
+    return killedPids
 
 #=========================================================================#
 if __name__ == "__main__":

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list