Only shutdown on specific tasks
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
index d1d8857..8baa038 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
@@ -102,6 +102,8 @@
                             "/s4/clusters/" + deployArgs.clusterName + "/app/" + deployArgs.appName,
                             s4rToDeploy.getAbsolutePath() });
 
+            // Explicitly shutdown the JVM since Gradle leaves non-daemon threads running that delay the termination
+            System.exit(0);
         } catch (Exception e) {
             LoggerFactory.getLogger(Deploy.class).error("Cannot deploy app", e);
         }
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
index d737d40..5861031 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Package.java
@@ -23,6 +23,9 @@
             params.add("appClass=" + packageArgs.appClass);
             params.add("appName=" + packageArgs.appName.get(0));
             ExecGradle.exec(packageArgs.gradleBuildFile, "installS4R", params.toArray(new String[] {}));
+
+            // Explicitly shutdown the JVM since Gradle leaves non-daemon threads running that delay the termination
+            System.exit(0);
         } catch (Exception e) {
             LoggerFactory.getLogger(Package.class).error("Cannot deploy app", e);
         }
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
index 114a4e9..7ddf48a 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
@@ -74,9 +74,6 @@
             taskArgs.addAll(Arrays.asList(Arrays.copyOfRange(args, 2, args.length)));
         }
         task.dispatch(taskArgs.toArray(new String[] {}));
-
-        // Explicitly shutdown the JVM since Gradle leaves non-daemon threads running that delay the termination
-        System.exit(0);
     }
 
     private static List<String> getTaskNames() {