diff --git a/core/src/main/scala/org/apache/spark/util/SignalUtils.scala b/core/src/main/scala/org/apache/spark/util/SignalUtils.scala
index 9479d8f74dd2530f345328225d7e8c771f6837a8..5a24965170cef99181fddb37830a5eb36d6a7e30 100644
--- a/core/src/main/scala/org/apache/spark/util/SignalUtils.scala
+++ b/core/src/main/scala/org/apache/spark/util/SignalUtils.scala
@@ -92,9 +92,11 @@ private[spark] object SignalUtils extends Logging {
       // register old handler, will receive incoming signals while this handler is running
       Signal.handle(signal, prevHandler)
 
-      // run all actions, escalate to parent handler if no action catches the signal
-      // (i.e. all actions return false)
-      val escalate = actions.asScala.forall { action => !action() }
+      // Run all actions, escalate to parent handler if no action catches the signal
+      // (i.e. all actions return false). Note that calling `map` is to ensure that
+      // all actions are run, `forall` is short-circuited and will stop evaluating
+      // after reaching a first false predicate.
+      val escalate = actions.asScala.map(action => action()).forall(_ == false)
       if (escalate) {
         prevHandler.handle(sig)
       }