Index: /trunk/src/VBox/ValidationKit/testdriver/base.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/base.py	(revision 65229)
+++ /trunk/src/VBox/ValidationKit/testdriver/base.py	(revision 65230)
@@ -178,5 +178,18 @@
     return sName;
 
-def processInterrupt(uPid):
+def __processSudoKill(uPid, iSignal, fSudo):
+    """
+    Does the sudo kill -signal pid thing if fSudo is true, else uses os.kill.
+    """
+    try:
+        if fSudo:
+            return utils.sudoProcessCall(['/bin/kill', '-%s' % (iSignal,), str(uPid)]) == 0;
+        os.kill(uPid, iSignal);
+        return True;
+    except:
+        reporter.logXcpt('uPid=%s' % (uPid,));
+    return False;
+
+def processInterrupt(uPid, fSudo = False):
     """
     Sends a SIGINT or equivalent to interrupt the specified process.
@@ -189,13 +202,8 @@
         fRc = winbase.processInterrupt(uPid)
     else:
-        try:
-            os.kill(uPid, signal.SIGINT);
-            fRc = True;
-        except:
-            reporter.logXcpt('uPid=%s' % (uPid,));
-            fRc = False;
+        fRc = __processSudoKill(uPid, signal.SIGINT, fSudo);
     return fRc;
 
-def sendUserSignal1(uPid):
+def sendUserSignal1(uPid, fSudo = False):
     """
     Sends a SIGUSR1 or equivalent to nudge the process into shutting down
@@ -209,13 +217,8 @@
         fRc = False;
     else:
-        try:
-            os.kill(uPid, signal.SIGUSR1); # pylint: disable=E1101
-            fRc = True;
-        except:
-            reporter.logXcpt('uPid=%s' % (uPid,));
-            fRc = False;
+        fRc = __processSudoKill(uPid, signal.SIGUSR1, fSudo); # pylint: disable=E1101
     return fRc;
 
-def processTerminate(uPid):
+def processTerminate(uPid, fSudo = False):
     """
     Terminates the process in a nice manner (SIGTERM or equivalent).
@@ -226,12 +229,8 @@
         fRc = winbase.processTerminate(uPid);
     else:
-        try:
-            os.kill(uPid, signal.SIGTERM);
-            fRc = True;
-        except:
-            reporter.logXcpt('uPid=%s' % (uPid,));
+        fRc = __processSudoKill(uPid, signal.SIGTERM, fSudo);
     return fRc;
 
-def processKill(uPid):
+def processKill(uPid, fSudo = False):
     """
     Terminates the process with extreme prejudice (SIGKILL).
@@ -242,9 +241,5 @@
         fRc = winbase.processKill(uPid);
     else:
-        try:
-            os.kill(uPid, signal.SIGKILL); # pylint: disable=E1101
-            fRc = True;
-        except:
-            reporter.logXcpt('uPid=%s' % (uPid,));
+        fRc = __processSudoKill(uPid, signal.SIGKILL, fSudo); # pylint: disable=E1101
     return fRc;
 
@@ -1536,7 +1531,6 @@
             afnMethods = [ sendUserSignal1, processInterrupt, processTerminate, processKill ];
         for fnMethod in afnMethods:
-            ## @todo Handle SUDO processes.
             for iPid in dPids:
-                fnMethod(iPid);
+                fnMethod(iPid, fSudo = dPids[iPid][1]);
 
             for i in range(10):
