diff --git a/framework/subsystems/ogsmd/helpers.py b/framework/subsystems/ogsmd/helpers.py
index 31a3e68..b89f332 100644
--- a/framework/subsystems/ogsmd/helpers.py
+++ b/framework/subsystems/ogsmd/helpers.py
@@ -110,21 +110,42 @@ class BiDict( object ):
             return self._d.keys() + self._back.keys()
 
 #=========================================================================#
-def processIterator():
+def processIterator(nameToFind):
+#=========================================================================#        
+    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(nameToFind):
+        if matchType=="posix":
+            if executableName == nameToFind:
+                yield entry
+        elif matchType=="weak":
+            if executablePath.find(nameToFind) != -1:
+                yield entry
+        elif matchType=="reallyweak":
+            if cmdline.find(nameToFind) != -1:
+                yield 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(int(pid), killSignal)
+            killedPids.append(int(pid))
+        except OSError: #permission denied/bad signal/etc...
+            pass
+    return killedPids
 
 #=========================================================================#
 if __name__ == "__main__":

