babashka/process updates

This commit is contained in:
Michiel Borkent 2020-10-20 23:50:48 +02:00
parent fcd30063f7
commit 1c10221f86
3 changed files with 18 additions and 15 deletions

@ -1 +1 @@
Subproject commit c3d861b574dd22a2136ff6fc2407f48b480d3a7a Subproject commit 90540747422efd0ea7a0128bd2827545de1333e0

View file

@ -5,20 +5,25 @@
(def tns (sci/create-ns 'babashka.process nil)) (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] (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))) (apply process/process args)))
(defn pb [& 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))) (apply process/pb args)))
(def process-namespace (def process-namespace
{'process (copy-var process tns) {'process (copy-var process tns)
'check (copy-var process/check tns) 'check (copy-var process/check tns)
'pb (copy-var pb tns) 'pb (copy-var pb tns)
'start (copy-var process/start tns)
'pipeline (copy-var process/pipeline tns) 'pipeline (copy-var process/pipeline tns)
'$ (copy-var process/$ tns) '$ (copy-var process/$ tns)
'*escape-fn* escape-fn}) '*default-escape-fn* escape-fn
'*default-shutdown-hook* shutdown-hook})

View file

@ -1,17 +1,14 @@
(ns killing-me-softly
(:refer-clojure :exclude [descendants]))
(import 'java.util.List) (import 'java.util.List)
(set! *warn-on-reflection* true) (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] (defn start-spawning [& args]
(let [depth (or (System/getenv "DEPTH") "0") (let [depth (or (System/getenv "DEPTH") "0")
depth (Integer/parseInt depth)] depth (Integer/parseInt depth)]
(when-not (= 4 depth) (when-not (= 4 depth) ;; process at depth 4 dies immediately
(let [pb (doto (ProcessBuilder. ^List args) (let [pb (doto (ProcessBuilder. ^List args)
(.inheritIO)) (.inheritIO))
_ (.put (.environment pb) "DEPTH" _ (.put (.environment pb) "DEPTH"
@ -21,9 +18,10 @@
(do (do
(Thread/sleep 500) (Thread/sleep 500)
(run! (fn [^java.lang.ProcessHandle handle] (run! (fn [^java.lang.ProcessHandle handle]
(do (prn (.pid handle)) (prn (.pid handle))
(.destroy handle))) (.destroy handle))
(child-process-handles (.toHandle proc)))) (let [handle (.toHandle proc)]
(cons handle (iterator-seq (.iterator (.descendants handle)))))))
(Thread/sleep 100000000)))))) (Thread/sleep 100000000))))))
(start-spawning "./bb" *file*) (start-spawning "./bb" *file*)