diff --git a/tests/checker.py b/tests/checker.py
index 3bf94627034bb310bd7960b5d33a893b139e631e..e877d7bbce2a3de775ad4efa9139a8a8089880a0 100644
--- a/tests/checker.py
+++ b/tests/checker.py
@@ -22,11 +22,23 @@ def check(testname):
     """
     with subprocess.Popen([os.path.join(src, "serial"), testname],
             stdout=subprocess.PIPE) as proc_serial_res:
-        serial_out = str(proc_serial_res.stdout.read()).strip("\n")
+        try:
+            outs, _ = proc_serial_res.communicate(timeout=3)
+            serial_out = str(outs).strip("\n")
+        except subprocess.TimeoutExpired:
+            proc_serial_res.kill()
+            outs, _ = proc_serial_res.communicate()
+            serial_out = ""
     for _ in range(0, 100):
         with subprocess.Popen([os.path.join(src, "parallel"), testname],
                 stdout=subprocess.PIPE) as proc_parallel_res:
-            parallel_out = str(proc_parallel_res.stdout.read()).strip("\n")
+            try:
+                outs, _ = proc_parallel_res.communicate(timeout=3)
+                parallel_out = str(outs).strip("\n")
+            except subprocess.TimeoutExpired:
+                proc_parallel_res.kill()
+                outs, _ = proc_parallel_res.communicate()
+                parallel_out = ""
             if serial_out != parallel_out:
                 return False