From 1c10221f862c5e8cf00fe115777b233dd5e0913a Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Tue, 20 Oct 2020 23:50:48 +0200 Subject: [PATCH] babashka/process updates --- process | 2 +- src/babashka/impl/process.clj | 13 +++++++++---- test/babashka/scripts/kill_child_processes.bb | 18 ++++++++---------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/process b/process index c3d861b5..90540747 160000 --- a/process +++ b/process @@ -1 +1 @@ -Subproject commit c3d861b574dd22a2136ff6fc2407f48b480d3a7a +Subproject commit 90540747422efd0ea7a0128bd2827545de1333e0 diff --git a/src/babashka/impl/process.clj b/src/babashka/impl/process.clj index 3576e98c..a06f11be 100644 --- a/src/babashka/impl/process.clj +++ b/src/babashka/impl/process.clj @@ -5,20 +5,25 @@ (def tns (sci/create-ns 'babashka.process nil)) -(def escape-fn (sci/copy-var process/*escape-fn* tns)) +(def escape-fn (sci/copy-var process/*default-escape-fn* tns)) +(def shutdown-hook (sci/copy-var process/*default-shutdown-hook* tns)) (defn process [& args] - (binding [process/*escape-fn* @escape-fn] + (binding [process/*default-escape-fn* @escape-fn + process/*default-shutdown-hook* @shutdown-hook] (apply process/process args))) (defn pb [& args] - (binding [process/*escape-fn* @escape-fn] + (binding [process/*escape-fn* @escape-fn + process/*default-shutdown-hook* @shutdown-hook] (apply process/pb args))) (def process-namespace {'process (copy-var process tns) 'check (copy-var process/check tns) 'pb (copy-var pb tns) + 'start (copy-var process/start tns) 'pipeline (copy-var process/pipeline tns) '$ (copy-var process/$ tns) - '*escape-fn* escape-fn}) + '*default-escape-fn* escape-fn + '*default-shutdown-hook* shutdown-hook}) diff --git a/test/babashka/scripts/kill_child_processes.bb b/test/babashka/scripts/kill_child_processes.bb index 67ed56b6..d1f509a5 100644 --- a/test/babashka/scripts/kill_child_processes.bb +++ b/test/babashka/scripts/kill_child_processes.bb @@ -1,17 +1,14 @@ +(ns killing-me-softly + (:refer-clojure :exclude [descendants])) + (import 'java.util.List) (set! *warn-on-reflection* true) -(defn child-process-handles [^java.lang.ProcessHandle x] - (distinct - (cons x - (mapcat child-process-handles - (iterator-seq (.iterator (.descendants x))))))) - (defn start-spawning [& args] (let [depth (or (System/getenv "DEPTH") "0") depth (Integer/parseInt depth)] - (when-not (= 4 depth) + (when-not (= 4 depth) ;; process at depth 4 dies immediately (let [pb (doto (ProcessBuilder. ^List args) (.inheritIO)) _ (.put (.environment pb) "DEPTH" @@ -21,9 +18,10 @@ (do (Thread/sleep 500) (run! (fn [^java.lang.ProcessHandle handle] - (do (prn (.pid handle)) - (.destroy handle))) - (child-process-handles (.toHandle proc)))) + (prn (.pid handle)) + (.destroy handle)) + (let [handle (.toHandle proc)] + (cons handle (iterator-seq (.iterator (.descendants handle))))))) (Thread/sleep 100000000)))))) (start-spawning "./bb" *file*)