[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